Dijkstra算法以及Java實現

(1)Dijkstra算法簡介

Dijkstra算法是典型的用來求最短路徑的算法,主要用來計算有向圖中從起始點到其他所有點的最短路徑.該算法採用貪心的思想,每次都查找與起始點距離最近的點,並將結果輸出.該算法的主要特點是每次迭代的時候選擇的下一個頂點是標記點之外距離源點最近的頂點.一般情況下,該算不能用來解決存在負權邊的圖。

(2)Dijkstra算法的設計思想

s爲源,w[u,v] 爲點uv 之間的邊的長度,結果保存在 dist[]。
初始化:源的距離dist[s]設爲0,其他的點距離設爲無窮大,同時把所有的點狀態設爲沒有擴展過。
循環n-1次:
    ① 在沒有擴展過的點中取一距離最小的點u,並將其狀態設爲已擴展。
    ② 對於每個與u相鄰的點v,如果dist[u] + w[u,v] < dist[v],那 
    麼把dist[v]更新成更短的距離dist[u] + w[u,v]。此時到點v的最短 
    路徑上,前一個節點即爲u。
    ③結束:此時對於任意的udist[u]就是su的距離。

由於上邊的說法太過形式化難以理解,所以給大家寫了個小例子,如下:

(3)Dijkstra算法的具體步驟
這裏寫圖片描述
如圖所示,假設A點爲源節點,目的是要計算從A點到其餘所有點的最短路徑。具體執行步驟如下表所示:
這裏寫圖片描述
這裏寫圖片描述

(4)Dijkstra算法的結果測試分析

1. 計算核心節點A到有向圖其餘節點的最短路徑信息,按順序輸出。
2. 計算出核心節點A到其餘節點的最短距離sum,按順序輸。
3. 計算出核心節點A到其餘節點的最短路徑sum之和,即sumend,並輸出。
4. 遍歷有向圖中所有節點,按順序做和A一樣的操作。

這裏寫圖片描述

1.分別計算出有向圖中所有節點到其餘節點的最短距離之和
2.如下圖,A到其餘所有節點最短距離之和爲29,B到其餘所有節點最短距離之和爲34,等等。
3.將這些最短距離之和進行比較,得出最小值。

這裏寫圖片描述
這就是整個Dijkstra算法的過程,具體代碼詳見樓主下篇博客,主要講解代碼部分(java實現)。

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