9.2.1 邻接矩阵存储方法
邻接矩阵是表示顶点之间相邻关系的矩阵。设G=(V,E)是具有n(n>0)个顶点的图,顶点的顺序依次为(vo,v1,...,vn-1),则G的邻接矩阵A是n阶方阵,其定义如下:
(1)如果G是无向图,则:
(2)如果G是有向图,则:
(3)如果G是带权无向图,则:
或表示为:
(4)如果G是带权有向图,则:
或表示为:
邻接矩阵的特点如下:
- 图的邻接矩阵表示是唯一的
- 无向图的邻接矩阵一定是一个对称矩阵。因此,按照压缩存储的思想,在具体存放邻接矩阵时只需存放上(或下)三角形阵的元素即可。
- 不带权的有向图的邻接矩阵一般来说是一个稀疏矩阵,因此,当图的顶点较多时,可以采用三元组表的方法存储邻接矩阵。
- 对于无向图,邻接矩阵的第i行(或第i列)非零元素(或非元素)的个数正好是第i个顶点vi的度。
- 对于有向图,邻接矩阵的第i行(或第i列)非零元素(或非)元素的个数正好是第i个顶点vi的出度(或入度)。
- 用邻接矩阵方法存储图,很容易确定图中任意两个顶点之间是否有边相连。但是,要确定图中有多少条边,则必须按行、按列对每个元素进行检测,所花费的时间代价很大。这是用邻接矩阵存储图的局限性。
邻接矩阵的数据类型定义如下:
#define MAXV <最大顶点个数> /*在后面的类型定义中都使用到本宏定义*/
#define InfoType int
typedef struct
{
int no; /*顶点编号*/
InfoType info; /*顶点其他信息*/
}VertexType; /*顶点类型*/
typedef struct /*图的定义*/
{
int edges[MAXV][MAXV]; /*邻接矩阵*/
int n,e; /*顶点数,弧数*/
VertexType vexs[MAXV]; /*存放顶点信息*/
}MGraph;
int returnInt(int i){
return i;
}