使用邻接矩阵存储图

使用邻接矩阵构造图
    分析:
        其实图相比于其它数据结构较复杂,但也是十分易懂的,对于使用邻接矩阵存储的图来说,我们所需要知道的数据有
        图的定点数、边数、用一个二维数组存储的边与边的联系及其权值,未连接的边我们要使用无穷表示,节点自身用0
        表示,初始时除自身节点外均表示为无穷。另外我们还需要一个一维数组用来存储我们的顶点个数

代码如下:读者可以自行测试

#define MAXSIZE 100 //数组最大值
typedef struct Graph {
	char Vertex[MAXSIZE];
	int Edge[MAXSIZE][MAXSIZE];
	int numV, numE;//顶点、边数量
}adjMatrix;
#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>

void createGraph(adjMatrix *G) {
	int v, e,vi,vj,w;
	printf("请输入创建的图的顶点与边个数(以空格分开):");
	scanf("%d %d",&v,&e);
	G->numE = e;
	G->numV = v;
	//初始化图
	for (int i = 0; i < v;i++) {
		for (int j = 0; j < v;j++) {
			i == j ? G->Edge[i][j] = 0 : G->Edge[i][j] = 32767;
		}
	}
	//将顶点存入数组
	for (int i = 0; i < G->numV;i++) {
		printf("请输入第%d个节点信息:",i+1);
		getchar();
		scanf("%c",&G->Vertex[i]);
	}
	//开始建立边与边的关系
	for (int i = 0; i < G->numE;i++) {
		printf("请输入边的信息vi vj w(以空格分开)");
		scanf("%d %d %d",&vi,&vj,&w);//有权值就写
		G->Edge[vi - 1][vj - 1] = w;//①
		G->Edge[vj - 1][vi - 1] = w;//②   这代表无向图
	}

}
void dispGraph(adjMatrix *G) {
	int i, j;
	printf("\n输出顶点的信息(字符):\n");
	for (i = 0; i < G->numV; i++)
		printf("%8c", G->Vertex[i]);

	printf("\n输出邻接矩阵:\n");
	printf("\t");
	for (i = 0; i < G->numV; i++)
		printf("%8c", G->Vertex[i]);

	for (i = 0; i < G->numV; i++)
	{
		printf("\n%8c", G->Vertex[i]);
		for (j = 0; j < G->numV; j++)
		{
			if (G->Edge[i][j] == 32767)
				//两点之间无连接时权值为默认的32767,
				//在无向图中一般用"0"表示,在有向图中一般用"∞",
				//这里为了方便统一输出 "∞"
				printf("%8s", "∞");
			else
				printf("%8d", G->Edge[i][j]);
		}
		printf("\n");
	}

}
//int main() {
//	adjMatrix G;
//	createGraph(&G);
//	dispGraph(&G);
//}

运行截图:

梦想也许在今天无法实现,但重要的是,它在你心里。重要的是,你一直在努力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

北街学长

你的鼓励使我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值