双连通分量边#
- biconnected_component_edges(G)[source]#
返回一个边的列表的生成器,输入图的每个双连通分量对应一个列表。
双连通分量是最大的子图,移除其中任何一个节点(以及与其关联的所有边)都不会使子图断开连接。注意,节点可能属于多个双连通分量。这些节点是关节(articulation points)或割点(cut vertices)。然而,每条边只属于一个双连通分量。
注意,按照惯例,双边(dyad)被视为一个双连通分量。
- 参数:
- GNetworkX Graph NetworkX 图
一个无向图。
- 返回:
- edgesgenerator of lists 列表生成器
边的列表生成器,每个双连通分量对应一个列表。
- 抛出:
- NetworkXNotImplemented
如果输入图不是无向图。
注释
查找关节和双连通分量的算法使用非递归深度优先搜索(DFS)实现,该搜索会跟踪反向边在DFS树中达到的最高级别。节点
n
是关节当且仅当存在一个以n
为根的子树,从n
的任何后继都没有连接到DFS树中n
的任何前驱的反向边。通过跟踪DFS遍历的所有边,我们可以获得双连通分量,因为一个双连通分量的所有边将在关节之间连续遍历。参考文献
[1]Hopcroft, J.; Tarjan, R. (1973). “Efficient algorithms for graph manipulation”. Communications of the ACM 16: 372–378. doi:10.1145/362248.362272
示例
>>> G = nx.barbell_graph(4, 2) >>> print(nx.is_biconnected(G)) False >>> bicomponents_edges = list(nx.biconnected_component_edges(G)) >>> len(bicomponents_edges) 5 >>> G.add_edge(2, 8) >>> print(nx.is_biconnected(G)) True >>> bicomponents_edges = list(nx.biconnected_component_edges(G)) >>> len(bicomponents_edges) 1