Networkx - 获取 Dijkstra 路径中的边属性
Networkx - Get edge properties in Dijkstra path
我有下图
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'])
这会为每条多边选择成本最低的最短路径中的边。
我有下图
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'])
这会为每条多边选择成本最低的最短路径中的边。