图的其中两种表示方式

Posted zhengxin909

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图的其中两种表示方式相关的知识,希望对你有一定的参考价值。

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.不方便检查任意一对顶点间是否存在边

 

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

以上是关于图的其中两种表示方式的主要内容,如果未能解决你的问题,请参考以下文章

图的存储方式——邻接矩阵和邻接表

图的基本表达形式

图的存储表示及示例

图的两种遍历方式

python 中画子图的两种方式

matplotlib两种画散点图的方式