7.2.1 图的数组存储表示 假设图中顶点数为n,则邻接矩阵 ![]() ![]() 网的邻接矩阵的定义为,当 ![]() ![]() ![]() 将图的顶点信息存储在一个一维数组中,并将它的邻接矩阵存储在一个二维数组中即构成图的数组表示。 ![]() const INFINITY = INT_MAX; // 最大值∞ const MAX_VERTEX_NUM = 20; // 最大顶点个数 typedef enum {DG, DN, AG, AN} GraphKind; // 类型标志{有向图,有向网,无向图,无向网} typedef struct ArcCell { // 弧的定义 VRType adj; // VRType是顶点关系类型。 // 对无权图,用1或0表示相邻否;对带权图,则为权值类型。 InfoType *info; // 该弧相关信息的指针 } AdjMatrix[MAX_VERTEX_NUM][MAX_VERTEX_NUM]; typedef struct { // 图的定义 VertexType vexs[MAX_VERTEX_NUM]; // 顶点信息 AdjMatrix arcs; // 表示顶点之间关系的二维数组 int vexnum, arcnum; // 图的当前顶点数和弧(边)数 GraphKind kind; // 图的种类标志 } MGraph; |
由于图结构中任意两个顶点之间都可能存在"关系",因此无法以顺序存储映象表示这种关系,即图没有顺序存储结构。 图的"邻接矩阵"是以矩阵这种数学形式描述图中顶点之间的关系。 |
|||
![]() ![]() ![]() |
![]() (无向图G2) 容易看出,无向图的邻接矩阵为对称矩阵。每一行中"1"的个数恰为该顶点的"度"。 |
|||
有向图G1的数组表示存储结构为:![]() ![]() |
|