当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python NetworkX biconnected_components用法及代码示例


本文简要介绍 networkx.algorithms.components.biconnected_components 的用法。

用法:

biconnected_components(G)

返回节点集的生成器,一个用于图的每个双连通分量的集合

双连通分量是最大子图,因此删除一个节点(以及该节点上的所有边)不会断开子图。请注意,节点可能是多个双连接组件的一部分。这些节点是关节点或切割顶点。关节点的去除将增加图的连通分量的数量。

请注意,按照惯例,二元组被认为是双连接组件。

参数

GNetworkX 图表

一个无向图。

返回

nodes生成器

节点集的生成器,每个双连接组件一组。

抛出

NetworkXNotImplemented

如果输入图不是无向图。

注意

查找关节点和双连接组件的算法是使用非递归深度优先搜索 (DFS) 实现的,该算法跟踪后边在 DFS 树中达到的最高级别。当且仅当存在以n为根的子树使得在DFS中链接到n的前驱的n的任何后继没有后边时,节点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.lollipop_graph(5, 1)
>>> print(nx.is_biconnected(G))
False
>>> bicomponents = list(nx.biconnected_components(G))
>>> len(bicomponents)
2
>>> G.add_edge(0, 5)
>>> print(nx.is_biconnected(G))
True
>>> bicomponents = list(nx.biconnected_components(G))
>>> len(bicomponents)
1

您可以使用排序生成双连通组件的排序列表,最大优先。

>>> G.remove_edge(0, 5)
>>> [len(c) for c in sorted(nx.biconnected_components(G), key=len, reverse=True)]
[5, 2]

如果你只想要最大的连接组件,使用 max 而不是 sort 更有效。

>>> Gc = max(nx.biconnected_components(G), key=len)

要将组件创建为子图,请使用:(G.subgraph(c).copy() for c in biconnected_components(G))

相关用法


注:本文由纯净天空筛选整理自networkx.org大神的英文原创作品 networkx.algorithms.components.biconnected_components。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。