图的存储结构-邻接矩阵

邻接矩阵

图的存储结构分为 邻接矩阵 和 邻接表, 本篇文章是有关通过邻接矩阵来实现图的存储, 邻接矩阵, 顾名思义, 即顶点之间的关系通过矩阵的形式表现出来, 矩阵的行坐标代表起始顶点的位置, 列坐标代表到达顶点的位置(无向图和无向网始末位置不讨论), 对于不带权的图或网而言, 矩阵中的值存放邻接标志, 如果起始顶点与到达顶点邻接, 则为 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("%s"<
  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值