I\xe2\x80\x99m 尝试使用 networkx 计算两个节点之间的最短路径。例如:
\n\npaths = nx.shortest_path(G, \xe2\x80\x98A\xe2\x80\x99, \xe2\x80\x98C\xe2\x80\x99, weight=\xe2\x80\x98cost\xe2\x80\x99)\nRun Code Online (Sandbox Code Playgroud)\n\npaths将返回类似:\n[\xe2\x80\x98A\xe2\x80\x99, \xe2\x80\x98B\xe2\x80\x99, \xe2\x80\x98C\xe2\x80\x99]
nx.shortest_path_length()返回该路径的成本,这也很有帮助。但是,我也想返回该路径遍历的边的列表。在这些边中是我存储的其他属性,我想返回它们。
这可能吗?
\n这是一个可以满足您所有需要的代码(希望是:p):
import numpy as np
# import matplotlib.pyplot as plt
import networkx as nx
# Create a random graph with 8 nodes, with degree=3
G = nx.random_regular_graph(3, 8, seed=None)
# Add 'cost' attributes to the edges
for (start, end) in G.edges:
G.edges[start, end]['cost'] = np.random.randint(1,10)
# Find the shortest path from 0 to 7, use 'cost' as weight
sp = nx.shortest_path(G, source=0, target=7, weight='cost')
print("Shortest path: ", sp)
# Create a graph from 'sp'
pathGraph = nx.path_graph(sp) # does not pass edges attributes
# Read attributes from each edge
for ea in pathGraph.edges():
#print from_node, to_node, edge's attributes
print(ea, G.edges[ea[0], ea[1]])
Run Code Online (Sandbox Code Playgroud)
输出将类似于以下内容:
Shortest path: [0, 5, 7]
(0, 5) {'cost': 2}
(5, 7) {'cost': 3}
Run Code Online (Sandbox Code Playgroud)