我使用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的最短路径(以重量计)(其重量= 9的ABC),但无论我做什么,我得到的唯一答案是2(边缘的数量,就好像图表没有重量) 。正确的答案应该是9。
答案 0 :(得分:1)
问题是你必须写“重量”这个词来将它分配给边缘。你给边缘标签,但没有重量。
当您计算节点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')
答案 1 :(得分:0)
从代码中删除此行
G.add_nodes_from(['A', 'B', 'C', 'D', 'E'])
答案 2 :(得分:0)
也许您可以尝试使用 nx.shortest_path()