算法與數據結構學習(57)-程序員常用10種算法(地傑斯特拉算法)

應用場景-最短路徑問題

實際應用場景
在這裏插入圖片描述

  1. 戰爭時期,勝利鄉有7個村莊(A, B, C, D, E, F, G) ,現在有六個郵差,從G點出發,需要分別把郵件分別送到 A, B, C , D, E, F 六個村莊
  2. 各個村莊的距離用邊線表示(權) ,比如 A – B 距離 5公里
  3. 問:如何計算出G村莊到 其它各個村莊的最短距離?
  4. 如果從其它點出發到各個點的最短距離又是多少?

迪傑斯特拉(Dijkstra)算法介紹

迪傑斯特拉(Dijkstra)算法是典型最短路徑算法,用於計算一個結點到其他結點的最短路徑。 它的主要特點是以起始點爲中心向外層層擴展(廣度優先搜索思想),直到擴展到終點爲止。

迪傑斯特拉(Dijkstra)算法過程

設置出發頂點爲v,頂點集合V{v1,v2,vi…},v到V中各頂點的距離構成距離集合Dis,Dis{d1,d2,di…},Dis集合記錄着v到圖中各頂點的距離(到自身可以看作0,v到vi距離對應爲di)

  1. 從Dis中選擇值最小的di並移出Dis集合,同時移出V集合中對應的頂點vi,此時的v到vi即爲最短路徑

  2. 更新Dis集合,更新規則爲:比較v到V集合中頂點的距離值,與v通過vi到V集合中頂點的距離值,保留值較小的一個(同時也應該更新頂點的前驅節點爲vi,表明是通過vi到達的)

  3. 重複執行兩步驟,直到最短路徑頂點爲目標頂點即可結束

思路圖解:
在這裏插入圖片描述
訪問過G後三個數組的值爲:
在這裏插入圖片描述
具體實現類:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章