最短路徑之dijistra

2021-09-27 04:01:31 字數 595 閱讀 9807

dijistra演算法:跑過一邊之後就把源點到所有點的最短距離都求出來了

演算法思想其實應該屬於dp,因為這個問題有著明顯的最優子結構

d[y]是指源點到y的最短距離,那顯而易見:d[y] = min

這個和一般的dp題**有點區別,因為一般的都是根據下標來推下乙個,而這個點之間的連線要靠圖來判斷

最重要的區別是初始化的時候只有乙個值是已知的,就是所有源點直接相鄰的點中d最小的那個點,其它的都是不確定的

所以這個遞推式真正的寫法應該式d[y] = min因為每次比較只能得到乙個真正的結果

如果讓我描述一下核心思想,差不多就是:乙個最短路中經過的任意兩點間的路也一定是最短路,所以當求出乙個點的最短路的時候就可以用它去更新其它的點了。

所以每輪選擇的dis[i]最小值一定是正確的,因為若不是選這條路,是任意的其它路在加一段,任意的其他路都一定比dis[i]大了,別說再加一段了。

不能用dijistra做最長路問題

因為dijistra求最短路的主要步驟是在所有沒有加入集合的點的dis陣列中每次選最小的,就一定是最小的,這就是關鍵所在了,若是求最長路,每次選最大的是未必正確的

Codeup最短路徑 最短路徑

n個城市,標號從0到n 1,m條道路,第k條道路 k從0開始 的長度為2 k,求編號為0的城市到其他城市的最短距離。第一行兩個正整數n 2 n 100 m m 500 表示有n個城市,m條道路,接下來m行兩個整數,表示相連的兩個城市的編號。n 1行,表示0號城市到其他城市的最短路,如果無法到達,輸出...

最短路徑之Floyd Warshall

最短路徑之floyd warshall1.演算法思路 若要求兩個點的最短路徑,可以通過引入第三個點來間接到目的地,若距離縮短了,那麼我們可以繼續找第四個點 知道所有的點找完了即是最短距離。假設我們點與點的距離如下圖 由圖可知,4 3的距離為12,假設我們通過1這個頂點來中轉,這時,4 3的距離就縮短...

最短路徑之spfa

其實就是用佇列對bellman ford進行優化 include include include include include include using namespace std static const int maxn 1000 點的數目 static const int inf 0x3f...