多源最短路演算法 Floyd演算法

2021-09-22 16:42:16 字數 1042 閱讀 3020

我們知道單源最短路是指從某乙個源點到圖中的其它頂點的最短路。

多源最短路就是指每乙個點到圖中其他頂點的最短路。

那麼有的人肯定想我知道求單源最短路的演算法了,那麼有多少個點我就求多少次唄,這樣做時間效率不高,空間效率也極其低。

那麼有什麼演算法求解多源最短路呢?——floyd

// 鄰接矩陣存圖

int dp[n]

[n][n]

;void

floyd

(int n)

else}}

}}這樣太浪費空間了把。

怎麼確定狀態轉移的?

看下圖

我們發現從頂點1到頂點4有三條路徑

dp[0][1][4]就相當於圖中的g[1][4]這裡採用鄰接矩陣的形式

然後k作為中介點可以使2,3

那麼dp[2][1][4] = dp[2][1][2] + dp[2][2][4]

也就是我們可以簡化為dp[1][4] = dp[1][2] + dp[2][4]

v1到v4等於v1到v2加上v2到v4,可以理解吧。

然後v1到v4還可以等於v1到v3加上v3到v4

即最後的最短路就是dp[1][4] = min(g[1][4], min(g[1][2] + g[2][4]

, g[1][3] + g[3][4]))

優化空間後的code

int g[n]

[n];

void

floyd

(int n)}}

}

多源最短路 Floyd演算法

問題的提出 已知乙個有向網 或者無向網 對每一對定點vi vj,要求求出vi與vj之間的最短路徑和最短路徑的長度。解決該問題有以下兩種方法 1 輪流以每乙個定點為源點,重複執行dijkstra演算法或者bellman ford演算法n次,就可以求出每一對頂點之間的最短路徑和最短路徑的長度,總的時間複...

Floyd演算法 多源最短路徑

解決稠密圖較好 準備工作 include floyd演算法解決稠密圖時更好 include include include using namespace std const int maxv 100 定義邊 typedef struct enode edge 定義鄰接矩陣儲存的圖 typedef ...

演算法整理 Floyd 多源最短路

首先,個人感覺起來,在四大最短路演算法中,floyd是最簡單的,也是最好理解的,但是嚴重受時間和空間的限制。存圖方式為二維陣列。複雜度 t o n 3 m o n 2 思路 o 1 核心思想 主題部分通過三個for迴圈 分別代表中點,起始點,目標點 通過每局來進行鬆弛操作,不斷更新兩點之間的最短路徑...