码迷,mamicode.com
首页 > 其他好文 > 详细

图的其中两种表示方式

时间:2020-04-26 01:03:50      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:两种   好处   邻接表   color   链表   一半   数组   i+1   简单   

1.无向图可以用邻接矩阵G [n] [n] —— n个顶点从0到n-1编号,若<Vi, Vj>是G中的边,则G [i] [j] = 1,否则G [i] [j] = 0;矩阵的特点:对角线都为0,以对角线为对称轴,两边对称。

对于无向图的存储,可以用一个长度为n(n+1)/2的1维数组a存储,可以节省一半的空间(a[0] = G00, a[1] = G10, a[2] = G11……),则Gij在a中对应的下标是:a[i * (i+1) / 2 + j]

对于网络,只要把G [i] [j]的值定义为边<Vi, Vj>的权重即可

邻接矩阵的好处:

1.直观、简单、好理解;

2.方便检查任意一对顶点间是否存在边;

3.方便找任一顶点的所有“邻接点”(有边直接相连的顶点)

4.方便计算任一顶点的“度”(从该点发出的边数为“出度”,指向该点的边数为“入度”)

  无向图:对应行或列非0元素的个数

  有向图:对应行非0元素的个数是“出度”;对应列非0元素的个数是“入度”

邻接矩阵的缺点:对于稀疏图来说有大量的无效元素,浪费空间。统计稀疏图中一共有多少条边,浪费时间

 

2.以此,引出另一个表示方式——邻接表:G [n]为指针数组,对应矩阵每行一个链表,只存非0元素。(其表示顺序不是唯一的)

对于网络,结构中要增加权重的域,用邻接表来存储 稀疏图 才值得

邻接表的特点:

1.方便找任一顶点的所有“邻接点”

2.节约稀疏图的空间,需要n个头指针,2e个结点(每个结点至少2个域)

3.对无向图来说,方便计算任一顶点的度;对有向图来说,只能计算“出度”;需要构造“逆邻接表”(存指向自己的边)来方便计算“入度”

4.不方便检查任意一对顶点间是否存在边

 

图的表示方式有很多,一般根据需要解决的问题来决定表示方式。

图的其中两种表示方式

标签:两种   好处   邻接表   color   链表   一半   数组   i+1   简单   

原文地址:https://www.cnblogs.com/zhengxin909/p/12776349.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!