使用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]