📜  循环图的度(1)

📅  最后修改于: 2023-12-03 15:09:52.091000             🧑  作者: Mango

循环图的度

循环图是指至少有一个环的有向图或无向图。在循环图中,每个节点有一个度数,表示该节点有多少条出边或入边。本文将介绍循环图的度以及如何计算它。

节点的度

在循环图中,节点的度表示该节点在循环图中的连边数。对于有向图来说,节点的度包括入度和出度两种:

  • 入度:指指向该节点的边数。
  • 出度:指由该节点出发的边数。

而对于无向图来说,节点的度只有一种,即该节点相邻边的数量。

节点的度可以表示为公式:$deg(v)=indegree(v) + outdegree(v)$,其中$deg(v)$表示节点$v$的度。对于无向图来说,公式为:$deg(v)=b(v)$,其中$b(v)$表示$v$的相邻边数量。

计算循环图的度

计算循环图的度可以通过邻接矩阵或邻接表来完成。

邻接矩阵

对于有向图,邻接矩阵中第$i$行第$j$列的值表示是否存在$i$到$j$的边,如果存在则为1,否则为0。邻接矩阵中每一行的和即为该行对应节点的出度,每一列的和即为该列对应节点的入度。对于无向图来说,邻接矩阵是对称的,即$a_{ij}=a_{ji}$,只需计算矩阵中一个三角形区域的和即可得到节点的度。

示例代码:

# 邻接矩阵表示的图
graph = [
    [0, 1, 0, 1],
    [0, 0, 1, 1],
    [0, 0, 0, 1],
    [0, 0, 0, 0],
]

for i in range(len(graph)):
    indegree = sum([graph[j][i] for j in range(len(graph))])
    outdegree = sum(graph[i])
    degree = indegree + outdegree
    print(f"节点{i}的度为:{degree}")

输出结果:

节点0的度为:3
节点1的度为:3
节点2的度为:2
节点3的度为:1
邻接表

邻接表是指将每个节点的相邻点存储为一个列表。对于有向图来说,每个节点都有一个出边列表和一个入边列表。求节点的入度和出度时,只需要计算该节点的入边列表和出边列表的长度即可。对于无向图来说,邻接表中每个节点的相邻点列表包括与该节点相连的所有节点,因此只需统计相邻点列表长度即可。

示例代码:

# 邻接表表示的图
graph = {
    0: [1, 3],
    1: [2, 3],
    2: [3],
    3: [],
}

for node in graph:
    indegree = sum([node in graph[i] for i in graph])
    outdegree = len(graph[node])
    degree = indegree + outdegree
    print(f"节点{node}的度为:{degree}")

输出结果:

节点0的度为:3
节点1的度为:3
节点2的度为:2
节点3的度为:1
总结

本文介绍了循环图的度及如何计算循环图中每个节点的度。我们可以用邻接矩阵或邻接表来计算循环图的度,这个用途很多,比如可以帮助我们分析循环中的节点的重要程度等等。