在给定自定义边缘权重的情况下计算 Networkx 中的最短路径



我正在尝试为每个边分配长度属性,并根据这些长度计算从节点 X 到节点 Y 的最短路径。

但是,我不确定如何正确引用我在代码的这一部分中指定的长度属性:
nx.shortest_path(G,source='Dehli',target='Pune', weight = ?????)

法典:

import matplotlib.pyplot as plt
G = nx.Graph()
G.add_nodes_from(["Dehli","Ahmadabad","Kolkata",'Bangalore','Pune','Maduraj'])
G.add_edge('Dehli', 'Ahmadabad', length =890)
G.add_edge('Dehli', 'Kolkata', length =1422)
G.add_edge('Dehli', 'Bangalore', length =2168)
G.add_edge('Dehli', 'Pune', length =1450)
G.add_edge('Dehli', 'Maduraj', length = 2603)
G.add_edge('Ahmadabad', 'Kolkata', length =1902)
G.add_edge('Ahmadabad', 'Bangalore', length =1403)
G.add_edge('Ahmadabad', 'Pune', length =624)
G.add_edge('Ahmadabad', 'Maduraj', length =1807)
G.add_edge('Kolkata', 'Bangalore', length =1778)
G.add_edge('Kolkata', 'Pune', length =1782)
G.add_edge('Kolkata', 'Maduraj', length =2043)
G.add_edge('Bangalore', 'Pune', length =824)
G.add_edge('Bangalore', 'Maduraj', length =404)
G.add_edge('Pune', 'Maduraj', length =1195)

nx.draw(G,pos,node_color='k')
path = nx.shortest_path(G,source='Dehli',target='Pune')
path_edges = zip(path,path[1:])
nx.draw_networkx_nodes(G,pos,nodelist=path,node_color='g')
nx.draw_networkx_edges(G,pos,edgelist=path_edges,edge_color='g',width=7)
print(nx.shortest_path_length(G,source='Dehli',target='Pune'))
plt.show()

从文档中看,对shortest_path的调用形式为shortest_path(G, source=None, target=None, weight=None)

可选参数weight

权重(无或字符串,可选(默认值 = 无((– 如果为"无",则每条边的权重/距离/成本为 1。如果是字符串,则使用此边属性作为边权重。任何不存在的边属性都默认为 1。

因此,在您的情况下,将其称为 path = nx.shortest_path(G,source='Dehli',target='Pune', weight='length') . 请注意,Networkx length=X获取 edge 属性,并将其存储在具有键'length'(字符串(和值 X 的字典中。

相关内容

最新更新