當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。