python数据结构与算法——图的最短路径(Floyd-Warshall算法)

使用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]
原文地址:https://www.cnblogs.com/hanahimi/p/4692631.html