最短路徑演算法

2021-08-26 02:15:58 字數 1442 閱讀 6185

各個演算法的比較

強調邊與邊的問題,能夠解決負權邊問題

基本操作,實現某頂點到所有頂點的最小距離

輸入樣例

5 5 //分別代表邊的條數與頂點的個數

2 3 2 //分別代表兩頂點和兩頂點對應邊的權值

1 2 -3

1 5 5

4 5 2

3 4 3

結果:0 -3 -1 2 4

#include#include#include#includeusing namespace std;

int p = 99999;

int dis[10100];//定義陣列dis[i],代表某點到頂點i的最小距離

int main()

for (int i = 1; i <= t; i++)

dis[i] = p;

dis[1] = 0;//dis[1]=0,代表某頂點到1的距離為0,可知此頂點為頂點1

/*核心***/

for (int i = 1; i < n; i++)//迴圈n-1條邊 }

for (int i = 1; i <= t; i++)

}

if判斷是否有負權迴路需要在迴圈n-1基礎上再迴圈一次看是否還會再替換,如果有負權迴路的話再迴圈一次會加負數,那麼結果還會替換

如果資料過多,時間複雜度會很大,有些情況不需要排序n-1次就已經排好了,這之後進行的操作就是多餘的,所要進行優化,者就是剪枝

定義乙個陣列bak來儲存陣列dis,當bak的數值不在變更後就退出迴圈

#include#include#include#includeusing namespace std;

int p = 99999;

int dis[10100];

int bak[10100];

int main()

for (int i = 1; i <= t; i++)

dis[i] = p;

dis[1] = 0;

for (int i = 1; i < n; i++)

}if (flag == 0) break;

for (int j = 1; j <= t; j++)

} for (int i = 1; i <= t; i++)

}

最短路徑演算法 最短路

在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的t shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?input 輸入包括多組資料。每組資料第一行是兩個整數n m n 100,m 10000 n...

最短路徑演算法

floyd演算法 012345 001 54 1108 1 2 801 3 3 1035 45 302 5413520 floyd 演算法過程描述如下 首先 以邊集 初始化,得到所有的直接連通代價 依次考慮第 k個結點,對於 中的每乙個 i j 判斷是否滿足 s i j s i k s k j 如果...

最短路徑演算法

個人覺得下面 有代表性 最短路徑演算法原始碼 vb 本人載 開發gis,遊自編的最短路徑查詢程式,速度特快,3萬節點,35000條路全部遍歷,只需1秒。現將最短路徑的思路告訴大家,希望大家在優化,並用不同語言編制,我正在學delphi,準備用delphi做成庫,本例以由拓撲關係的arc info 檔...