
import pandas as pd
import matplotlib.pyplot as plt
import networkx as nx
dfAdj=pd.DataFrame([[0,30,0,40,23,10],#0表示不邻接,
[30,0,13,20,0,23],
[0,13,0,10,20,0],
[40,20,10,0,10,23],
[23,0,20,10,0,33],
[10,23,0,23,33,0]])
G2=nx.from_pandas_adjacency(dfAdj)#由 pandas顶点邻接矩阵创建NetworkX 图
#计算最短路径:注意最短路径与最短加权路径的不同
#两个指定顶点之间的最短路径
minPath03=nx.shortest_path(G2,source=0,target=3)#顶点0到顶点3的最短路径
lMinPath03=nx.shortest_path_length(G2,source=0,target=3)#最短路径长度
print("顶点 0 到 3 的最短路径为:{},最短路径长度为:{}".format(minPath03,lMinPath03))
#两个指定顶点之间的最短加权路径
minWPath03=nx.bellman_ford_path(G2,source=0,target=3)#顶点0到顶点3的最短加权路径
#两个指定顶点之间的最短加权路径的长度
lMinWPath03=nx.bellman_ford_path_length(G2,source=0,target=3)#最短加权路径长度
print("顶点 0 到 3 的最短加权路径为:{},最短加权路径长度为:{}".format(minWPath03,lMinWPath03))
for i in range(1,6):
minWPath0=nx.bellman_ford_path(G2,source=0,target=i)#顶点0到其它顶点的最短加权路径
lMinPath0=nx.bellman_ford_path_length(G2,source=0,target=i)#最短加权路径长度
print("城市 0 到 城市 {} 机票票价最低的路线为: {},票价总和为:{}".format(i,minWPath0,lMinPath0))
nx.draw_shell(G2,with_labels=True,node_color='#ffc0cb',edge_color='b',font_color='w',width=2)
plt.show()顶点 0 到 3 的最短路径为:[0, 3],最短路径长度为:1 顶点 0 到 3 的最短加权路径为:[0, 4, 3],最短加权路径长度为:33 城市 0 到 城市 1 机票票价最低的路线为: [0, 1],票价总和为:30 城市 0 到 城市 2 机票票价最低的路线为: [0, 1, 2],票价总和为:43 城市 0 到 城市 3 机票票价最低的路线为: [0, 4, 3],票价总和为:33 城市 0 到 城市 4 机票票价最低的路线为: [0, 4],票价总和为:23 城市 0 到 城市 5 机票票价最低的路线为: [0, 5],票价总和为:10

算法:Bellman-Ford算法是对图进行V-1次松弛操作,得到所有可能的最短路径。
链接:https://github.com/liuyubobobo/Play-with-Algorithms/blob/master/09-Shortest-Path/Course%20Code%20(C%2B%2B)/05-Implementation-of-Bellman-Ford/BellmanFord.h
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!