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

时间:2018-01-29 16:28:39

标签: networkx dijkstra

我有以下图表

path=nx.dijkstra_path(g,"A","D",weight='cost')
->['A', 'C', 'D']

我试图找到A和D之间的最短路径并且有效

edgesinpath=zip(path[0:],path[1:])
for (u,v ) in edgesinpath:
    print u,v,g[u][v]

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

尝试远:

A C {0: {'index': 1, 'cost': 20}}
C D {0: {'index': 5, 'cost': 150}, 1: {'index': 6, 'cost': 200}}

但当然这会消除所有的边缘,在路径中数学u,v:

/[0-9]+\.[0-9]+/

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

THX。

1 个答案:

答案 0 :(得分:1)

一种可能的解决方案:

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'])

这样可以选择每个多边缘,即最短路径中的边缘,并且成本最低。