咨询NetworkX中Dijkstra最短路径总成本的便捷获取方法
如何用NetworkX直接获取最短路径的总成本?
嘿,作为NetworkX新手能自己写出计算路径总成本的代码已经很赞啦!其实你不用手动遍历路径节点求和,NetworkX本身就有内置工具可以直接搞定这个,而且能让你的代码更简洁高效~
两个实用的内置函数
nx.dijkstra_path_length:这个函数可以直接返回两点间最短路径的总权重,不用先获取路径再手动计算。用法很简单,只需要传入图、起点和终点就行。nx.single_source_dijkstra:如果你既需要最短路径的长度,又需要路径本身,这个函数能一次性返回这两个结果,避免像你原来的代码那样重复调用dijkstra_path,节省计算资源。
优化后的代码示例
把你原来的代码改成这样就可以了:
import numpy as np import networkx as nx def shortest_path(a, b): # 你的邻接矩阵 m = np.array([[0,2,1,...]]) network = nx.from_numpy_matrix(m) # 一次性获取最短路径长度和路径 total_cost, path = nx.single_source_dijkstra(network, source=a, target=b) return (total_cost, path)
如果只需要总成本的话,单独调用nx.dijkstra_path_length(network, a, b)就能得到结果,完全省去手动求和的步骤。
这两个函数和你之前用的dijkstra_path基于相同的Dijkstra算法逻辑,结果和你手动计算的完全一致,但代码更简洁,也避免了手动索引可能带来的错误~
内容的提问来源于stack exchange,提问作者Zito Relova
相关产品推荐
相关产品推荐

