标签:
使用Floyd-Warshall算法 求图两点之间的最短路径
不允许有负权边,时间复杂度高,思路简单
1 # 城市地图(字典的字典) 2 # 字典的第1个键为起点城市,第2个键为目标城市其键值为两个城市间的直接距离 3 # 将不相连点设为INF,方便更新两点之间的最小值 4 INF = 99999 5 G = {1:{1:0, 2:2, 3:6, 4:4}, 6 2:{1:INF, 2:0, 3:3, 4:INF}, 7 3:{1:7, 2:INF, 3:0, 4:1}, 8 4:{1:5, 2:INF, 3:12, 4:0} 9 } 10 11 # 算法思想: 12 # 每个顶点都有可能使得两个顶点之间的距离变短 13 # 当两点之间不允许有第三个点时,这些城市之间的最短路径就是初始路径 14 15 # Floyd-Warshall算法核心语句 16 # 分别在只允许经过某个点k的情况下,更新点和点之间的最短路径 17 for k in G.keys(): # 不断试图往两点i,j之间添加新的点k,更新最短距离 18 for i in G.keys(): 19 for j in G[i].keys(): 20 if G[i][j] > G[i][k] + G[k][j]: 21 G[i][j] = G[i][k] + G[k][j] 22 23 24 for i in G.keys(): 25 print G[i].values()
结果:
[0, 2, 5, 4] [9, 0, 3, 4] [6, 8, 0, 1] [5, 7, 10, 0]
python数据结构与算法——图的最短路径(Floyd-Warshall算法)
标签:
原文地址:http://www.cnblogs.com/hanahimi/p/4692631.html