圖-最短路徑

最短路徑

  • 網圖:兩個 頂點之間經過的邊上權值之和最小的路徑;

迪杰斯特拉(Dijkstra)算法

  • 按照路徑長度遞增的產生最短路徑;
  • 不是一次性算出兩個定點之間的最短距離;
  • 通過計算每個中間頂點的最短距離,最后推導出要求的頂點最短距離;
graph-matrix
graph-matrix

graph-Dijkstra_code1
graph-Dijkstra_code1
graph-Dijkstra_code2
graph-Dijkstra_code2
  1. 5~12行是初始化階段,final一維數組值均為0,D數組記錄所有頂點到v0的最短路徑值,當前是{65535,1,5,65535,65535,65535,65535,65535,65535},p數組全為0,表示目前還沒有找到任意一個頂點的最短路徑
  2. 13行是一個主循環,每循環一次求得v0與一個頂點的最短路徑,也就是讓一個頂點的final值為1
  3. 16~24行的循環,先令min為65535,通過w循環,與D[w]比較,找到目前最小的min和k值。當前是:D[1]的值最小,因為在第一次初始化的時候,v0連接的就兩條邊,v1和v2,如果是第二次循環,那就是D[2]
  4. 25~32行,是在修正之前已經判定的v0和某個點的最短距離,例如:在初始化的時候v0到v2的最短距離是5,但是第一次循環完成之后,發現v0->v1=min=1,v1->v2=3,因此v0->v1->v2=min+G.matirx[v1][v2]=4,這個值是小于D[2]=5的
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容