图的存储结构-邻接矩阵

本文详细介绍了图的存储结构之一——邻接矩阵,包括其概念、具体实现方式,以及如何创建、遍历有向网。通过邻接矩阵,可以表示顶点之间的邻接关系,对于无向图,矩阵中的值表示邻接标志,而对于带权图,则存储相应的权值。文章最后展示了测试和应用效果。
摘要由CSDN通过智能技术生成

邻接矩阵

图的存储结构分为 邻接矩阵 和 邻接表, 本篇文章是有关通过邻接矩阵来实现图的存储, 邻接矩阵, 顾名思义, 即顶点之间的关系通过矩阵的形式表现出来, 矩阵的行坐标代表起始顶点的位置, 列坐标代表到达顶点的位置(无向图和无向网始末位置不讨论), 对于不带权的图或网而言, 矩阵中的值存放邻接标志, 如果起始顶点与到达顶点邻接, 则为 1, 否则为 0; 而对于带权图或网而言, 如果起始顶点与到达顶点邻接, 则为指定权值, 否则为一个无穷大的数.

邻接矩阵的具体实现

定义图的类型

//定义一些自定义类型
typedef char VertexType[4]; //结点类型
#define INFINITY 10000 //定义一个无穷大的数
#define MAXSIZE 100 //最大顶点的个数
//DG:有向图 GN:有向网 UG:无向图 UN:无向网
typedef enum {
   DG, DN, UG, UN} GraphKind;
//定义弧或边的信息结构
typedef struct {
   
	//若是无权图, 用 1 代表相邻, 0 代表不相邻; 若是有权图, 则存储权值
	int adj; 
	//存储与弧或边相关的信息
	char* infor;
}ArcNode, AdjMaxtrix[MAXSIZE][MAXSIZE];
//定义图的类型及相关信息
typedef struct {
   
	//存储顶点
	VertexType vex[MAXSIZE];
	//定义一个存储了弧或边信息的邻接矩阵
	AdjMaxtrix arc;
	//顶点数
	int vexnum;
	//弧或边数
	int arcnum;
	//图的类型
	GraphKind kind;
}MGraph;

创建一个有向网

void CreateGraph(MGraph* N) {
   
	//定义一个是否录入弧的信息的判断变量
	int InforFlag = 0;
	//定义两个相邻结点的名称变量
	VertexType v1, v2;
	//定义权值
	int w = 0;
	//定义输入权值(或相邻)位置的索引
	int row, col;
	//定义一个储存每个弧信息的数组
	char s[MAXSIZE];
	printf("请输入有向网 N 的顶点数,弧数,弧的信息(是:1, 否:0):");
	scanf("%d,%d,%d", &N->vexnum, &N->arcnum, &InforFlag);
	printf("请输入 %d 个顶点的值(<%d个字符):\n", N->vexnum, MAXSIZE);
	//保存网的各个顶点
	for (int i = 0; i < N->vexnum; ++i) {
   
		scanf(
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值