邻接矩阵
一.基本概念
(1)1表示有边,0表示无边
(2)先行后列
图中红框表示A指向B之间的边(无向图表示AB之间的边)
(3.1)无向图
B的度=3
第2行非0元素个数
或:第2列非0元素的个数
故:第i个结点的度 = 第i行(或第i列)的非零元素个数
(3.2)有向图
行表示出度,列表示入度
B的出度3(B→A、B→E、B→F)
B的入度3
B的度6
故:
第i个结点的出度 = 第i行的非零元素个数
第i个结点的入度 = 第i列的非零元素个数
第i个结点的度 = 第i行、第i列的非零元素个数之和
(4)邻接矩阵的实现
#define MaxVertexNum 100//顶点数目最大值
typedef struct {
char Vex[MaxVertexNum];//顶点表
int Edge[MaxVertexNum][MaxVertexNum];//邻接矩阵,边表
int vexnum, arcnum;//图的当前顶点数和边数/弧数
}MGraph;
二.邻接矩阵法存储带权图(网)
(1)数值表示行到列弧的权值(无向图表示边的权值)
∞表示不存在与之相邻的边
(2)图的邻接矩阵存储结构定义
#define MaxVertexNum 100//顶点数目最大值
typedef char VertexType;//顶点的数据类型
typedef int EdgeType;//带权图中边上的数据类型
typedef struct {
VertexType Vex[MaxVertexNum];//顶点
EdgeType Edge[MaxVertexNum][MaxVertexNum];//边的权
int vexnum, arcnum;//图的当前顶点数和边数/弧数
}MGraph;
(3)有时候将自己指向自己的∞写为0
(4)空间复杂度O(|V|²)
只和顶点数相关,与边无关
(5)性质
适合存储稠密图
无向图的邻接矩阵的对称矩阵,可以压缩存储
(5.1)邻接矩阵A
A^n[i][j]等于由顶点i到顶点j的长度为n的路径的数目
例如:A² [1][4]=左边矩阵第1行*右边矩阵第4列 =1
即:由顶点A到顶点D长度为2的路径数目为1
n=3则三次相乘,其他同理