2015-11-23 98 views
1

我有一個節點和邊的列表,但我想要一些邊的長度是兩個而不是一個。因此,當使用內置算法計算節點之間的距離時,它將返回如何在Networkx中指定邊長來計算最短距離?

例如,如果我有(1,2),(2 *,3),(4 *,5)作爲節點之間的邊,如果星號節點之間的距離爲2,則(1,2)之間的距離應該爲1,(2,3)應該爲2而不是1,然後(1,5)之間的距離應該爲5的3.

當添加節點我試過G.add_edge(4,5,length=2)nx.shortest_path_length(G,source=4,target=5))仍然返回1而不是兩個。我怎樣才能指定邊長?

+0

:'長度措施接下來的邊數。「 – furas

+0

所以你說的是我應該加權邊緣並使用Dijkstra來代替? – SharpObject

回答

5

您需要連接到您的邊緣length屬性,然後指定您希望通過這些長度加權找到最短路徑時:從`shortest_path_length`文檔

# Had to add an edge from 3 to 4 to your example edges 
# or there's no path from 1 to 5 
edges = [(1, 2, 1), (2, 3, 2), (3, 4, 1), (4, 5, 2)] 

G = networkx.Graph() 

for start, end, length in edges: 
    # You can attach any attributes you want when adding the edge 
    G.add_edge(start, end, length=length) 

networkx.shortest_path_length(G, 1, 5, weight='length') 
Out[8]: 6