弗洛伊德演算法

2021-06-21 11:11:06 字數 1049 閱讀 1912

弗洛伊德演算法(floyd),又稱為是插點法。目的是求加權圖中頂點中最短路徑的方法。本文通過舉例子的方法想你具體解釋何為弗洛伊德演算法。

有乙個送禮物的問題,是csdn上的乙個題目,題目的詳情是這樣的。

hehe和xixi在乙個地方玩遊戲,xixi把n-1件禮物(hehe以前送給xixi的)分別藏在了另外n-1個地方,

這些地方都能互相到達,且所有的邊都是有方向的。

現在hehe要做的事就是去那些地方找回那n-1件禮物給xixi;

由於每一件禮物都有特殊的意義,所以xixi要求hehe每找到一件禮物,就必須馬上返回xixi所在的位置,對她說一句當年送她這件禮物的時候所說的話。

由於每走乙個單位長度hehe需要花費1分鐘,xixi還要求hehe在最快的時間內把這些禮物帶回來交給她,你能幫助hehe麼?

輸入測試資料有t組,每組測試資料開始為兩個整數n和m,1 <= n,m <= 100000。

n代表所有的位置,m代表這些位置之間的長度

然後是m行,每行有三個數,u,v,w,即位置u和位置v之間有一條單向的邊,距離為w;

你可以假設位置的編號是從1到n,xixi的位置始終都在1;

輸出對於每組測試資料, 用一行輸出hehe所花費的最短時間。

輸入樣例

13 3

1 2 4

2 3 5

3 1 6

輸出樣例

30   由這道題目我們可以劃出圖形:

可知道,題目需要求得的是:d[1→2]+d[2→1]+d[1→3]+d[3→1]的大小(d[i→j]表示結點i到j的最短距離):4+(5+6)+(4+5)+6=30

最後根據弗洛伊德演算法思想寫出來**了,但是在csdn執行時會出錯。不過思想是沒錯的,大家可以根據**理解下弗洛伊德

#include #include #define max 10000

int graph[1000][1000],g[1000][1000];//graph是各個節點之間距離,g代表鄰接矩陣陣列

int main()}}

for(i=1;i

弗洛伊德演算法

floyd演算法詳解 求解任意兩點間的最短距離 floyd warshall演算法,簡稱floyd演算法,用於求解任意兩點間的最短距離,時間複雜度為o n 3 我們平時所見的floyd演算法的一般形式如下 1void floyd 注意下第6行這個地方,如果dist i k 或者dist k j 不存...

弗洛伊德演算法

弗洛伊德演算法 求任意一點i到任意一點j的最短路。分析 求i到j的最短路,大可以使用群舉法,因為點都是離散的,i到j的路徑是有限的,所以一定可以通過群舉法得到最短路,但群舉法卻沒太大意義,他的意義在於 把群舉法 通過修改 進行分類,得到好的演算法。flod演算法的分類標準是 通過i到j過點的情況進行...

弗洛伊德演算法

floyd warshall演算法,簡稱floyd演算法,用於求解任意兩點間的最短距離,時間複雜度為o n 3 使用條件 範圍 通常可以在任何圖中使用,包括有向圖 帶負權邊的圖。floyd warshall 演算法用來找出每對點之間的最短距離。它需要用鄰接矩陣來儲存邊,這個演算法通過考慮最佳子路徑來...