最短路徑演算法

2021-10-03 01:46:57 字數 1306 閱讀 4658

一般用來求倆個點的最短的距離

方法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 檔...