當用圖結構來表示通訊、交通等網路,權重代表距離或者成本,尋找最短路徑就成為了乙個重要的任務。
給定帶權網路g=(v;e),源點s,對於其他所有頂點v,尋找s到v的最短路徑,連線成一顆最短路徑樹。可以證明,最短路徑的任一字首也是最短路徑。
這一性質,可以理解為,對於一顆最短路徑樹,按到起點的距離排序,刪除後面k個頂點以及關聯邊後,殘存的子樹t『依然是最短路徑樹。因此,只需要找到乙個新的距離源點s最近的頂點,即可擴充子樹,最終成為全圖的最短路徑樹。
考慮優先順序搜尋的框架,當前頂點尚未發現的鄰接頂點,其優先順序可以定義為其父親的優先順序加上聯邊的權重,即priority(u)=priority(parent(u))+weight(v,u)。與prim演算法類似,每次只需要將優先順序最高的頂點以及聯邊加入子樹,最終即可得到最短路徑樹。
1 templatestructdijkstra
211 }//
每次都是尋找離開始節點s最近的節點,僅當新節點才更新,每個已發現節點的priority都是到s的最短距離
12 };
與prim演算法不同之處在於,prim演算法僅考慮子樹到鄰接頂點的聯邊權重;dijkstra演算法需要考慮的是到源點s的最短路徑,基於字首仍然是最短路徑這一前提,只需要簡化為,distance(s,u)=distance(s,v)+distance(v,u)。對應優先順序,將邊的權重作為優先順序,即可實現。最後,沿著樹邊即可得到一顆最短路徑樹。
Dijkstra最短路徑演算法
基本思路是 選擇出發點相鄰的所有節點中,權最小的乙個,將它的路徑設定為確定。其他節點的路徑需要儲存起來。然後從剛剛確認的那個節點的相鄰節點,算得那些節點的路徑長。然後從所有未確定的節點中選擇乙個路徑最短的設定為確定。重複上面步驟即可。void dijkstra graph g,string v fl...
Dijkstra最短路徑演算法
引入 dijkstra 迪傑斯特拉 演算法是典型的最短路徑路由演算法,用於計算乙個節點到其他所有節點的最短路徑。主要特點是以起始點為中心向外層層擴充套件,直到擴充套件到終點為止。dijkstra演算法能得出最短路徑的最優解,但由於它遍歷計算的節點很多,所以效率低。package dijkstra p...
最短路徑 Dijkstra演算法
最短路徑 描述 已知乙個城市的交通路線,經常要求從某一點出發到各地方的最短路徑。例如有如下交通圖 則從a出發到各點的最短路徑分別為 b 0c 10 d 50 e 30 f 60 輸入 輸入只有乙個用例,第一行包括若干個字元,分別表示各頂點的名稱,接下來是乙個非負的整數方陣,方陣維數等於頂點數,其中0...