邻接矩阵
文章目录邻接矩阵1. 数组(邻接矩阵)表示法无向图的邻接矩阵表示法有向图的邻接矩阵表示法有权图(网)的邻接矩阵表示法邻接矩阵的存储表示2.采用邻接矩阵表示法创建无向网邻接矩阵1111 1. 数组(邻接矩阵)表示法建立一个顶点表(记录各个顶点信息)和一个邻接矩阵(表示各个顶点之间关系)。设图A=(V,E)有n个顶点,则图的邻接矩阵是一个二位数组A.arc
·
邻接矩阵
1
1
1
1
1. 数组(邻接矩阵)表示法
- 建立一个顶点表(记录各个顶点信息)和一个邻接矩阵(表示各个顶点之间关系)。
- 设图A=(V,E)有n个顶点,则
- 图的邻接矩阵是一个二位数组A.arcs[n][n],定义为:
- 设图A=(V,E)有n个顶点,则
无向图的邻接矩阵表示法
分析1:无向图的邻接矩阵是对称的;
分析2:顶点i的度=第i行(列)中1的个数;
特别:完全图的邻接矩阵中,对角元素为0,其余1。
有向图的邻接矩阵表示法
注:在有向图的邻接矩阵中,
第i行含义:以结点vi为尾的弧(即出度边);
第i列含义:以结点vi为头的弧(即入度边)。
分析1:有向图的邻接矩阵可能是不对称的;
分析2:顶点的出度 = 第 i 行元素之和
顶点的入度 = 第 i 列元素之和
顶点的度 = 第 i 行元素之和 + 第 i 列元素之和
有权图(网)的邻接矩阵表示法
邻接矩阵的存储表示
用两个数组分别存储顶点表和邻接矩阵
#define Maxlnt 32767 //表示极大值,即 ∞
#define MVNum 100 //最大顶点数
typedef char VerTexType; //设顶点的数据类型为字符型
typedef int ArcType; //假设边的权值类型为整型
typedef struct{
VerTexType vexs[MVNum]; //顶点表
ArcType arcs[MVNum][MVNum]; //邻接矩阵
int vexnum,arcnum; //图的当前点数和边数
}AMGraph; //Adjacency Matrix Graph
2.采用邻接矩阵表示法创建无向网
【算法思想】
(1)输入总顶点数和总边数。
(2)依次输入点的信息存入顶点表中。
(3)初始化邻接矩阵,使每个权值初始化为极大值。
(4)构造邻接矩阵。
- 邻接矩阵——有什么好处?
- 直观、简单、好理解
- 方便检查任意一对顶点间是否存在边
- 方便找任一顶点的所有“邻接点”(有边直接相连的顶点)
- 方便计算任一顶点的“度”(从该点发出的边数为“出度”,指向该点的边数为“入度”)
- 无向图:对应行(或列)非0元素的个数;
- 有向图:对应行非0元素的个数是“出度”;
对应列非0元素的个数是“入度”。
- 邻接矩阵——有什么不好?
- 不便于增加和删除顶点
- 浪费空间——存稀疏图(点很多而边很少)有大量无效元素
- 对稠密图(特别是完成图)还是很合算的
- 浪费时间——统计稀疏图中一共有多少条边
更多推荐
已为社区贡献1条内容
所有评论(0)