NetworkX中指定自定义边length属性计算最短路径的疑问
解决NetworkX最短路径中引用自定义边属性的问题
嗨,这个问题其实很容易解决!你只需要把weight参数设置为字符串'length'就可以了——NetworkX的最短路径函数会直接识别这个边属性的名称,用它的值来作为路径权重计算的依据。
完整的代码示例
我把你的代码补全并修正了正确的用法,你可以直接参考:
import networkx as nx import matplotlib.pyplot as plt # 创建图并添加节点 G = nx.Graph() G.add_nodes_from(["Dehli","Ahmadabad","Kolkata",'Bangalore','Pune','Maduraj']) # 添加带length属性的边(补全了部分边让示例可运行) G.add_edge('Dehli', 'Ahmadabad', length=890) G.add_edge('Dehli', 'Kolkata', length=1500) G.add_edge('Ahmadabad', 'Pune', length=650) G.add_edge('Pune', 'Bangalore', length=800) G.add_edge('Bangalore', 'Maduraj', length=400) G.add_edge('Kolkata', 'Bangalore', length=1800) # 关键:用字符串'length'指定权重属性 shortest_path = nx.shortest_path(G, source='Dehli', target='Pune', weight='length') print("从Dehli到Pune的最短路径(基于length属性):", shortest_path) # 可选:计算这条路径的总长度来验证 total_length = nx.shortest_path_length(G, source='Dehli', target='Pune', weight='length') print("路径总长度:", total_length)
为什么这么做?
当你给图的边添加自定义属性(比如这里的length)时,NetworkX的路径计算函数(比如shortest_path、shortest_path_length)的weight参数接受一个字符串,这个字符串就是你定义的边属性的名称。函数会自动遍历所有边,读取对应属性的值作为权重,从而计算出基于该权重的最短路径。
如果不指定weight参数,函数默认会把每条边的权重视为1,计算的是节点数最少的路径,而不是你想要的基于长度的路径。
内容的提问来源于stack exchange,提问作者Ewa Szyszka
相关产品推荐
相关产品推荐

