您的位置:首页 > 其它

9.2图的存储结构 9.2.1 邻接矩阵存储方法

2013-05-02 21:54 204 查看

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法