簡體   English   中英

使用 NetworkX 在 python 中計算圖權重

[英]calculating graph weight in python with NetworkX

我正在使用 networkx 計算有向加權圖中兩個頂點之間的最短距離(就權重而言)。 我認為dijkstra_path_length算法是在這里使用的正確算法,但我不明白我必須將什么作為權重的默認參數才能獲得我想要的結果。

 import networkx as nx G = nx.MultiDiGraph() G.add_nodes_from(['A', 'B', 'C', 'D', 'E']) G.add_edge('A', 'B', 5) G.add_edge('B', 'C', 4) G.add_edge('C', 'D', 8) G.add_edge('D', 'C', 8) G.add_edge('D', 'E', 6) G.add_edge('A', 'D', 5) G.add_edge('C', 'E', 2) G.add_edge('E', 'B', 3) G.add_edge('A', 'E', 7)

這是我輸入的圖表。 我必須計算從 A 到 C(其 ABC 的權重 = 9)的最短路徑(就權重而言),但無論我做什么,我得到的唯一答案是 2(邊數,就好像圖形沒有權重一樣) . 正確答案應該是9。

問題是你必須寫下“權重”這個詞才能將其分配給邊緣。 您正在給邊緣貼標簽,但沒有權重。

下一個代碼在計算節點 A 和 C 之間的距離時打印 9。

import networkx as nx
G = nx.MultiDiGraph()
G.add_nodes_from(['A', 'B', 'C', 'D', 'E'])

G.add_edge('A', 'B', weight=5)
G.add_edge('B', 'C', weight=4)
G.add_edge('C', 'D', weight=8)
G.add_edge('D', 'C', weight=8)
G.add_edge('D', 'E', weight=6)
G.add_edge('A', 'D', weight=5)
G.add_edge('C', 'E', weight=2)
G.add_edge('E', 'B', weight=3)
G.add_edge('A', 'E', weight=7)

print nx.dijkstra_path_length(G, source = 'A', target = 'C')

從您的代碼中刪除此行

G.add_nodes_from(['A', 'B', 'C', 'D', 'E'])

也許你可以嘗試使用 nx.shortest_path()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM