图的其中两种表示方式
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.不方便检查任意一对顶点间是否存在边
图的表示方式有很多,一般根据需要解决的问题来决定表示方式。
以上是关于图的其中两种表示方式的主要内容,如果未能解决你的问题,请参考以下文章