目录
下一篇:图的存储邻接表
一、邻接矩阵
注意:(A行,B列)表示有从到到B的邻接边
如图:
对于无向图,矩阵中的每一个1代表两个顶点邻接(存在一条边)0代表不邻接,一条边代表两个1(因为无向)
对于有向图,与无向图不同,一个弧代只表一个1
结构:
//邻接矩阵存储图
//顶点最大数
#define MaxVertexNum 100
typedef struct {
char Vex[MaxVertexNum];//顶点表
int Edge[MaxVertexNum][MaxVertexNum];//邻接矩阵,也可以用bool类型
int aexnum,arcnum;//当前的边/弧的条数
}MGraph;
思考:
求顶点的度:遍历第i行(或第i列)的非零元素个数
有向图的出度和入度
出度:第i行非零的个数
入度:第i列非零的个数
度:出度+入度
若边带权值,边的值可以使用权值
可以使用一个很大很大的值表示无穷,例如int的最大值
#define INFINITY 最大值
自己指向自己的顶点可以表示为0,即在带权图中0和无穷都表示两个顶点间没有边
空间复杂度为O(|V|^2)
对于无向图是对称矩阵可以使用矩阵压缩(只存储上三角或下三角矩阵)
二、邻接矩阵的性质
根据矩阵相乘的原理,类似于连通性问题,只要有一个无法连通就不能到达,例如下图中第一个例子a12 a24就是代表1可以通过2再到4,距离为2,而其他的式子都为0表示不能到达
用A表示邻接矩阵,则A^n[i][j]等于从顶点i到j的长度为n的路径的数目
的
小结: