一般用來求倆個點的最短的距離
方法1:
floyd演算法:
通過三層迴圈,將每種情況一一比較,最後得出最短的路徑。
**
#include
intmain()
for(i=
0;i)scanf
("%d%d"
,&start,
&end)
;//輸入起點與終點
//以下五行為核心**
for(k=
0;k)for
(i=0
;i)for
(j=0
;j(e[i]
[j]>e[i]
[k]+e[k]
[j])
//如果於第三個點k,能讓i到j距離變短
//,就更新i到j的距離
e[i]
[j]=e[i]
[k]+e[k]
[j];
if(e[start]
[end]
!=inf)
printf
("%d\n"
,e[start]
[end]);
else
printf
("-1\n");
}return0;
}
該方法核心**十分簡單,只有五行,但是該方法時間複雜度位n的三次方,比較大,在時間上要求不高的時候可以使用。
2.dijkstra演算法
通過用乙個陣列記錄乙個源點到其他個點的距離,然後找到乙個離該點最近的點,並標記。因為該點離這個點最近,所以不可能會通過第三個點來減少這倆點之間的路程,然後依次找下去,找到最短路徑
**
#include
int e[
1001][
1001];
intmain()
}//將源點到各點的距離儲存在dis陣列裡面
for(i=
1;i<=n;i++
) dis[i]
=e[1
][i]
;for
(i=1
;i<=n;i++
) book[i]=0
; book[1]
=1;//源點為確定點
for(i=
1;ibook[u]=1
;//標記確定點
for(v=
1;v<=n;v++)}
}printf
("%d\n"
,dis[n]);
}return0;
}
以上就是常用的倆種最短路徑方法 最短路徑演算法 最短路
在每年的校賽裡,所有進入決賽的同學都會獲得一件很漂亮的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 檔...