python資料結構與演算法——圖的最短路徑(Dijkstra演算法)

來源:互聯網
上載者:User

標籤:

 1 # Dijkstra演算法——通過邊實現鬆弛 2 # 指定一個點到其他各頂點的路徑——單源最短路徑 3  4 # 初始化圖參數 5 G = {1:{1:0,    2:1,    3:12}, 6      2:{2:0,    3:9,    4:3}, 7      3:{3:0,    5:5}, 8      4:{3:4,    4:0,    5:13,   6:15}, 9      5:{5:0,    6:4},10      6:{6:0}}11     12 13 # 每次找到離源點最近的一個頂點,然後以該頂點為重心進行擴充14 # 最終的到源點到其餘所有點的最短路徑15 # 一種貪婪演算法16 17 def Dijkstra(G,v0,INF=999):18     """ 使用 Dijkstra 演算法計算指定點 v0 到圖 G 中任意點的最短路徑的距離19         INF 為設定的無限遠距離值20         此方法不能解決負權值邊的圖21     """22     book = set()23     minv = v024     25     # 源頂點到其餘各頂點的初始路程26     dis = dict((k,INF) for k in G.keys())27     dis[v0] = 028     29     while len(book)<len(G):30         book.add(minv)                                  # 確定當期頂點的距離31         for w in G[minv]:                               # 以當前點的中心向外擴散32             if dis[minv] + G[minv][w] < dis[w]:         # 如果從當前點擴充到某一點的距離小與已知最短距離      33                 dis[w] = dis[minv] + G[minv][w]         # 對已知距離進行更新34         35         new = INF                                       # 從剩下的未確定點中選擇最小距離點作為新的擴散點36         for v in dis.keys():37             if v in book: continue38             if dis[v] < new: 39                 new = dis[v]40                 minv = v41     return dis42 43 44 dis = Dijkstra(G,v0=1)45 print dis.values()    

 

python資料結構與演算法——圖的最短路徑(Dijkstra演算法)

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.