所谓“邻接矩阵”的存储方式就是用一个一维数组存储图中全部的n个顶点的信息,用一个n×n的矩阵表示图中各顶点的邻接关系和权值。在矩阵中用1或0表示顶点间是否存在邻接关系。如果是网图的话,用0或∞表示不邻接(0可能被用作权值),用一个非零数表示权值。
根据图和矩阵的性质,该存储方式应具有以下特点:
- 无向图的邻接矩阵一定是一个对称阵,所以在存储时只需存储矩阵的上三角即可。
- 由于这里讨论的是简单图,所以图中不存在自回路,所以矩阵的主对角线元素都为0。
- 对于无向图,矩阵第i行(或第i列)的非零元素个数正好是第i个顶点的度。
- 对于有向图,矩阵第i行(或第i列)的非零元素个数正好是第i个顶点的出度(或入度)。
下面给出邻接矩阵存储图的代码描述。
以下是存储结构的声明。
#define MaxVertexNum 100 //最大顶点数设为100
#define INFINITY 65535 //无穷设为双字节无符号整数的最大值65535
enum GraphType {DG, UG, DN, UN}; //有向图,无向图,有向网图,无向网图
typedef stuct Mgraph{
char Vertices[MaxVertexNum];