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]

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM