networkx學習與使用——(4)連通性與連通分量
阿新 • • 發佈:2021-01-07
技術標籤:networkx學習python資料結構圖論資料探勘演算法
networkx學習與使用——(4)連通性與連通分量
連通性與連通分量
連通性定義:若一個途中人兩點間有路徑相通,則稱此圖為連通圖。
例如:networkx學習與使用——(3)路與圈中建立的APANET就是一個連通圖,但並不是所有的圖都是連通圖。
連通分量定義:若圖G的節點子集滿足如下兩個條件:
- 子集中任意兩個節點間均有路徑相通;
- 該子集不是其他任何滿足條件1的子集的一部分;
則稱該子集為圖G的一個連通分量。具體例項如下:
import networkx as nx #載入networkx包
import matplotlib.pyplot as plt #用於畫圖
G = nx.Graph() #無向圖
example_edges = [('A','B'),('C','E'),('D','E'),
('F','G'),('F','H'),('G','I'),
('G','J'),('H','J'),('H','L'),
('H','M'),('I','K'),('J' ,'K'),
('L','K'),('L','H'),('L','M')]
G.add_edges_from(example_edges)
上圖的例子共有三個連通分量,這是很直觀的。
networkx中的連通性分析
事實上對於一個圖,我們對連通性的需求通常有兩點:
- 該圖是否連通?
- 若圖不連通,那麼此圖有多少連通分量?
networkx將這樣的分析歸類在Algorithms->Components中:
判斷圖是否連通:
print(nx.is_connected(G))
out:
False
求圖的連通分量的數量:
print(nx.number_connected_components( G))
out:
3
求圖各連通分量的節點集合:
for i in nx.connected_components(G):
print(i)
out:
{'B', 'A'}
{'D', 'E', 'C'}
{'K', 'J', 'I', 'M', 'H', 'L', 'G', 'F'}
生成各個連通分量的子圖:
graphs=list(nx.connected_component_subgraphs(G))
分別畫出graphs[0]、graphs[1]和graphs[2]如下圖:
求包含某個節點的連通分量的節點集合:
print(nx.node_connected_component(G, 'H'))
out:
{'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M'}
大體上簡單的連通性分析就是這些,networkx還提供了更豐富的連通性分析,包括有向圖的連通性分析,強連通分析和弱連通分析,割點割邊的分析,這些後面再闡述。
參考
networkx官網地址:https://networkx.org/