1. 程式人生 > 其它 >networkx學習與使用——(4)連通性與連通分量

networkx學習與使用——(4)連通性與連通分量

技術標籤:networkx學習python資料結構圖論資料探勘演算法

networkx學習與使用——(4)連通性與連通分量

連通性與連通分量

連通性定義:若一個途中人兩點間有路徑相通,則稱此圖為連通圖。
例如:networkx學習與使用——(3)路與圈中建立的APANET就是一個連通圖,但並不是所有的圖都是連通圖。
連通分量定義:若圖G的節點子集滿足如下兩個條件:

  1. 子集中任意兩個節點間均有路徑相通;
  2. 該子集不是其他任何滿足條件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中的連通性分析

事實上對於一個圖,我們對連通性的需求通常有兩點:

  1. 該圖是否連通?
  2. 若圖不連通,那麼此圖有多少連通分量?

networkx將這樣的分析歸類在Algorithms->Components中:
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]如下圖:
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/