【图】(三)顶点度的计算 - C语言

 图相关文章:

1. 图的建立 - 邻接矩阵与邻接表icon-default.png?t=M85Bhttps://blog.csdn.net/m15253053181/article/details/127552328?spm=1001.2014.3001.55012. 图的遍历 - DFS与BFSicon-default.png?t=M85Bhttps://blog.csdn.net/m15253053181/article/details/127558368?spm=1001.2014.3001.55013. 顶点度的计算icon-default.png?t=M85Bhttps://blog.csdn.net/m15253053181/article/details/127558599?spm=1001.2014.3001.55014. 最小生成树 - Prim与Kruskalicon-default.png?t=M85Bhttps://blog.csdn.net/m15253053181/article/details/127589852?spm=1001.2014.3001.55015. 单源最短路径 - Dijkstra与Bellman-Fordicon-default.png?t=M85Bhttps://blog.csdn.net/m15253053181/article/details/127630356?spm=1001.2014.3001.55016. 多源最短路径 - Floydicon-default.png?t=M85Bhttps://blog.csdn.net/m15253053181/article/details/128039852?spm=1001.2014.3001.55017. 拓扑排序AOV网icon-default.png?t=M85Bhttps://blog.csdn.net/m15253053181/article/details/128042358?spm=1001.2014.3001.5501


目录

顶点度的计算

1 邻接矩阵计算顶点的度

2 邻接表计算顶点的度


顶点度的计算

对于无向图来说,顶点的度deg(v_i)就等于与其相邻接的顶点的个数;而对于有向图来说,由于边的方向性,顶点的度很自然地被分为了入度id(v_i)和出度od(v_i)。有向图出度与入度的计算与无向图顶点的度的计算大同小异,因此仅以无向图为例。


1 邻接矩阵计算顶点的度

首先介绍一下邻接矩阵的特点

【图】(三)顶点度的计算 - C语言_第1张图片

邻接矩阵中包含了以下信息:

① G的顶点数p就是G的邻接矩阵A的阶数。

② G的边数q就是A中1的个数的一半。

③ 顶点v_i的度deg(v_i)等于A的第i行上1的个数。

④ 若A的第i行上的全部元素都为0,则v_i为孤立点。

⑤ A是对称且对角线上全部元素为0 (反自反且对称)。

⑥ 若两个图的邻接矩阵相等或通过交换某些行和列后相同,则这两个图是同构的。

其中,我们可以通过这一条来进行计算:

顶点的度等于A的第i行上1的个数。

显然,只需要统计矩阵某一行上非-1元的个数,便是该顶点的度。程序比较容易,请读者自行实现。


2 邻接表计算顶点的度

由邻接表的定义可以知道:

使用指针数组G[N],G[i]代表以第i个顶点为头结点的链表,只存与之邻接的顶点。

G[i]​链表的长度(除去头结点-自身)即为顶点的度。程序比较容易,代码如下:

 /* 计算邻接表个顶点的度 */
 void CalcDegree_L(AdjList L, int arr[][MaxVertexNum])
 {
     int i, count;
     LGNode pMove = NULL;
     for (i = 0; i < L->numV; i++)
     {
         count = -1; // 除去自身
         pMove = &(L->list[i]);
         while (pMove)
         {
             count++;
             pMove = pMove->next;
         }
         arr[0][i] = i;
         arr[1][i] = count;
     }
 }

你可能感兴趣的:(数据结构,数据结构,算法,图论)