领接矩阵的C语言实现

该代码段展示了如何在C++中定义并使用宏来创建一个无向网的邻接矩阵,包括定义顶点、边的最大数量,以及输入和初始化图的数据结构。CreateUDN函数用于构造无向网,通过用户输入构建图的顶点和边,并存储在邻接矩阵中。
摘要由CSDN通过智能技术生成
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define MaxInt 35537//表示极大值∞
#define MVNUM 100//最大顶点数
typedef char VertexType;
typedef int ArcType;

typedef struct {
	VertexType vertex[MVNUM];//顶点表
	ArcType arcs[MVNUM][MVNUM];//领接矩阵
	int vexnum, arcnum;//图的当前点数与边数
}AMGragh;//Adjacency Matrix Graph
/*
	算法思想
	(1)输入总顶点数和总边数
	(2)依次输入点的信息存入顶点表中
	(3)初始化领接矩阵,使每个权值初始化为极大值
	(4)构造领接矩阵
*/
int LocateVex(AMGragh G, VertexType v)//定位函数
{
	for (int i = 0; i < G.vexnum; i++)
	{
		if (v == G.vertex[i]) return i;
	}
}
void CreateUDN(AMGragh* G)//构造无向网
{
	printf("请输入顶点的个数和边的个数:\n");
	scanf("%d %d", &((*G).vexnum), &((*G).arcnum));
	printf("请输入顶点:\n");
	rewind(stdin);
	for (int i = 0; i < (*G).vexnum; i++)
	{
		scanf("%c", &((*G).vertex[i]));
	}
	for (int i = 0; i < (*G).vexnum; i++)
	{
		for (int j = 0; j < (*G).vexnum; j++)
		{
			(*G).arcs[i][j] = MaxInt;
		}
	}
	for (int k = 0; k < (*G).arcnum; k++)
	{
		char v1, v2;
		int w;
		int i, j;
		printf("请输入2个顶点及其权值:\n");
		rewind(stdin);
		scanf("%c%c%d", &v1, &v2, &w);
		i = LocateVex(*G, v1);
		j = LocateVex(*G, v2);
		(*G).arcs[i][j] = w;
		(*G).arcs[j][i] = (*G).arcs[i][j];
		printf("\n输入的值:%c %c %d (%d,%d)\n", v1, v2, w, i, j);
	}
}
int main()
{
	AMGragh G;
	CreateUDN(&G);
	for (int i = 0; i < G.vexnum; i++)
	{
		for (int j = 0; j < G.vexnum; j++)
		{
			printf("%d ", G.arcs[i][j]);
		}
		printf("\n");
	}
	return 0;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值