前言:
一直對于最短路徑算法比較好奇,適用的場景非常多,類似地鐵,封閉室內,開闊的園區等場景,在給定了幾個確定節點,和通路的情況下,求最短距離或者最短時間;這種應用場景是非常常見的,于是實現一下ios版本的Dijkstra算法,歡迎建議;
適用場景:旅游,交通類項目
算法方式:通過權值判斷最短路徑點,通過嵌套循環更新最短路徑表dis[]和通了路徑表father[]
特性:貪心算法,不使用負權數
例子:無向圖;有向圖原理一樣
開始:
上貨:
1.定義全局變量:地圖矩陣
2.初始化全局變量值繪制矩陣參數,對照以上路線圖可看明白:
3.實現dijksta算法:注意使用二維循環數組
一.外循環用于遍歷所有結點,第一個子循環獲取距離原點start的最短距,更新最短路徑father路線表
二.第二個子循環,利用第一個子循環確定的最短路徑點min_i索引與min_i節點相關點計算min_i跟索引點w距離+dis[min_i](min_i與原點start距離),是否小于dis[w](w與原點start距離),成立則更新dis表,并重新刷新father表重新繪制最短線路.
這里就是最終獲得的最短路徑值,以及路線結果;
這里就是最終獲得的最短路徑值,以及路線結果:
總結:總體來說Dijkstra算法沒有過多考慮時間復雜度問題,用到迭代思路,效率方便:算法效率不及a星算法;不過代碼比較精煉,可讀性較強。注重一個原理:一層大循環更新一次最短距離表和路徑表,后面慢慢領悟起來就容易了。
后面會理解下a星星算法,來實現最短路徑,相信也蠻有意思!歡迎大家踩點互相學習,算法枯燥,趣味無窮!