最短路徑法:
演算法的主要思想是:單獨一條邊的路徑也不一定是最佳路徑。 從任意一條單邊路徑開始。所有兩點之間的距離是邊的權的和,(如果兩點之間沒有邊相連, 則為無窮大)。 對於每一對頂點 u 和 v,看看是否存在乙個頂點 w 使得從 u 到 w 再到 v 比己知的路徑更短。如果是更新它。 先把所有的結果都計算出來放在陣列裡面,然後根據需要輸出所需要的兩點之間的最短路徑。用了三個迴圈來實現
還有乙個要mark一下的是:不如乙個陣列s[i][j];那可以用這個陣列來存放三個數 i,j和s[i][j];
code:
#include#includeint a[100][100],cost=99999
;int dian,bian,l,r;//
點,邊,要求距離的兩個點
intmain()
//i和j表示節點;a[i][j]表示兩點間距離
printf("
輸入節點i,j以及i,j之間的距離\n");
for(k=1;k<=bian;k++)
while(1
)
return0;
}//input sample:
/*10 16
0 14
0 21
1 49
1 58
2 46
2 31
2 68
3 54
3 67
6 85
4 75
4 86
5 78
5 86
7 97
8 93
sample:
0 915
/*我自己寫了一下,在把陣列initializate的時候,那個迴圈條件是到點的數目,只有在輸入幾個邊的距離的時候才是那個m
最短路徑 Floyd
簡介 floyd演算法又稱為插點法,是一種利用動態規劃的思想尋找給定的加權圖中多源點之間最短路徑的演算法,與dijkstra演算法類似。該演算法名稱以創始人之一 1978年圖靈獎獲得者 史丹福大學電腦科學系教授羅伯特 弗洛伊德命名。樣例求解 示例 include include using name...
floyd演算法(最短路徑)
最短路徑 描述 已知乙個城市的交通路線,經常要求從某一點出發到各地方的最短路徑。例如有如下交通圖 則從a出發到各點的最短路徑分別為 b 0c 10 d 50 e 30 f 60 輸入 輸入只有乙個用例,第一行包括若干個字元,分別表示各頂點的名稱,接下來是乙個非負的整數方陣,方陣維數等於頂點數,其中0...
最短路徑Floyd演算法
前面我們介紹了單源最短路徑問題的dijkstra演算法,dijkstra演算法雖然有比較好看的複雜度,但其對於有負權值的圖來講,就顯得力不從心了,下面我們來介紹另一種更為廣泛的最短路徑問題的解法 floyd演算法 floyd演算法 弗洛伊德演算法 的原理基於動態規劃,比如要找出從a到b的經過這k個點...