2016-05-06 61 views
1

我正在計算常規網絡中任意兩個節點之間的所有可能的最短路徑。如果網絡連接(例如,最大的組件=整個網絡),我沒有問題。Python:圖中斷開組件的所有最短路徑

當我斷開組件時出現問題:假設節點n和節點j之間沒有路徑,則會引發NetworkXNoPath錯誤。

我的問題:我想跳過所有未連接的節點對。我知道我需要一個if來檢查是否存在提出的錯誤,但我不知道如何將它添加到我的代碼中。

我的用於計算圖中的所有的任何兩個節點之間的可能的最短路徑的代碼:

import networkx as nx 
    counts=OrderedDict() 
    for n in F.nodes(): counts[n]=0 
    for n in F.nodes(): 
     for j in F.nodes(): 
      if (n!=j): 
       gener=nx.all_shortest_paths(F,source=n,target=j) 
       for p in gener: 
        for v in p: counts[v]+=1 

回顧一下:我可以使用nx.bidirectional_dijkstra(F, n, j)到節點n和節點之間檢查的邊緣的存在j,並且如果缺少這樣的邊緣,則會引發NetworkXNoPath錯誤,但是如何檢查此錯誤以跳過一對未連接的節點?

+0

已嘗試使用嘗試,除此之外。你可以嘗試:nx.bidirectional_dijkstra(F,n,j),除了NetworkXNoPath:#你想要的。 – sumit

+0

其實,我不知道如何使用它的這種情況下,但我想這是答案... – FaCoffee

回答

0

你可以在python中使用錯誤處理。

try: 
    nx.bidirectional_dijkstra(F, n, j) 
except NetworkXNoPath: 
    # do whatever you want 

您可以使用此link更多的幫助

+0

實際上有一個'nx.'失蹤,但這工作正常。謝謝! – FaCoffee

2

只要做到每個連接組件的計算。測試兩個節點之間是否沒有路徑可能會很昂貴。

connected_components = nx.connected_component_subgraphs(G) 
for component in connected_components: 
    #your code here.        
+0

,但這僅適用於[無向圖](https://networkx.github.io/documentation/networkx-1.10/reference/generated/networkx.algorithms.components.connected.connected_component_subgraphs.html?highlight=connected_component_subgraph)我們如何在有向圖中處理這個問題? – LancelotHolmes