如何用NetworkX的dijkstra_path求最短路径长度及获取路径权重?
NetworkX 最短路径距离相关问题解答
嘿,我来帮你搞定这两个NetworkX的问题!
1. 如何用dijkstra_path函数获取最短路径的长度?
nx.dijkstra_path()返回的是最短路径的节点序列(比如从节点1到节点2的路径是[1,2]),如果要得到这条路径的总权重长度,你可以搭配nx.path_weight()函数来计算:
import networkx as nx # 优化后的图定义(无向图无需重复添加双向边) G = nx.Graph() G.add_edge(1, 2, weight=450) G.add_edge(1, 3, weight=390) G.add_edge(1, 4, weight=550) G.add_edge(1, 8, weight=1310) G.add_edge(2, 3, weight=300) # 获取最短路径的节点序列 path = nx.dijkstra_path(G, source=1, target=2) # 计算该路径的总权重长度 path_length = nx.path_weight(G, path, weight='weight') print(path_length) # 输出:450
2. 直接获取最短路径的距离/权重,无需路径本身
当然有专门的函数!nx.dijkstra_path_length()就是干这个的——它直接返回源节点到目标节点的最短路径总权重,省去了先获取路径的步骤,效率更高:
# 直接计算节点1到节点3的最短路径权重 distance = nx.dijkstra_path_length(G, source=1, target=3) print(distance) # 输出:390(对比1->2->3的750,这是更短的路径权重)
另外提个小细节:你用的是nx.Graph()(无向图),这类图的边默认是双向可达的,所以不需要重复添加(1,2)和(2,1)这样的边,加一次就够啦~
内容的提问来源于stack exchange,提问作者houssem zeiri
相关产品推荐
相关产品推荐

