gpt4 book ai didi

Networkx - 获取 Dijkstra 路径中的边缘属性

转载 作者:行者123 更新时间:2023-12-04 17:46:05 25 4
gpt4 key购买 nike

我有以下图表

import networkx as nx

g = nx.MultiGraph()

#link 0
g.add_edge("A","B",cost=20,index=0)

#link 1
g.add_edge("A","C",cost=20,index=1)

#link 2
g.add_edge("B","C",cost=10,index=2)

#link 3
g.add_edge("B","D",cost=150,index=3)

#link 4
g.add_edge("C","D",cost=150,index=5)
g.add_edge("C","D",cost=200,index=6)

我正在尝试找到 A 和 D 之间的最短路径并且有效
path=nx.dijkstra_path(g,"A","D",weight='cost')
->['A', 'C', 'D']

我需要的是获取此路径中的边缘信息(更具体的索引)。

尝试到很远:
edgesinpath=zip(path[0:],path[1:])
for (u,v ) in edgesinpath:
print u,v,g[u][v]

但当然,这将消除所有边缘,即对路径中的 u,v 进行数学计算:
A C {0: {'index': 1, 'cost': 20}}
C D {0: {'index': 5, 'cost': 150}, 1: {'index': 6, 'cost': 200}}

知道如何获得正确的信息吗?这可以通过networkx获得吗?

谢谢。

最佳答案

一种可能的解决方案:

edges_ids = []
for u,v in edgesinpath:
edge = sorted(g[u][v], key=lambda x:g[u][v][x]['cost'])[0]
edges_ids.append(g[u][v][edge]['index'])

这为每个多边选择了最短路径中的边,成本最低。

关于Networkx - 获取 Dijkstra 路径中的边缘属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48505823/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com