路徑矩陣
通過乙個圖的權值矩陣求出它的每兩點間的最短路徑矩陣。
從圖的帶權鄰接矩陣a=[a(i,j)] n×n開始,遞迴地進行n次更新,即由矩陣d(0)=a,按乙個公式,構造出矩陣d(1);又用同樣地公式由d(1)構造出d(2);……;最後又用同樣的公式由d(n-1)構造出矩陣d(n)。矩陣d(n)的i行j列元素便是i號頂點到j號頂點的最短路徑長度,稱d(n)為圖的距離矩陣,同時還可引入乙個後繼節點矩陣path來記錄兩點間的最短路徑。
採用鬆弛技術(鬆弛操作),對在i和j之間的所有其他點進行一次鬆弛。所以時間複雜度為o(n^3);
狀態轉移方程
其狀態轉移方程如下: map[i,j]:=min;
map[i,j]表示i到j的最短距離,k是窮舉i,j的斷點,map[n,n]初值應該為0,或者按照題目意思來做。
當然,如果這條路沒有通的話,還必須特殊處理,比如沒有map[i,k]這條路。
#include
#include
#include
using
namespace std;
const
int n =
210, inf =
1e9;
int n, m, q;
int d[n]
[n];
void
floyd()
intmain()
floyd()
;while
(q --
)return0;
}
Floyd求最短路
傳送門 題意 給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,邊權可能為負數。再給定k個詢問,每個詢問包含兩個整數x和y,表示查詢從點x到點y的最短距離,如果路徑不存在,則輸出 impossible 資料保證圖中不存在負權迴路。輸入格式 第一行包含三個整數n,m,k 接下來m行,每行包含三個整...
AcWing Floyd求最短路 Floyd
時 空限制 1s 64mb 給定乙個n個點m條邊的有向圖,圖中可能存在重邊和自環,邊權可能為負數。再給定k個詢問,每個詢問包含兩個整數x和y,表示查詢從點x到點y的最短距離,如果路徑不存在,則輸出 impossible 資料保證圖中不存在負權迴路。第一行包含三個整數n,m,k 接下來m行,每行包含三...
Floyd演算法(求最短路)
百科名片 弗洛伊德演算法 floyd演算法又稱為弗洛伊德演算法,插點法,是一種用於尋找給定的加權圖中頂點間最短路徑的演算法。該演算法名稱以創始人之一 1978年圖靈獎獲得者 史丹福大學電腦科學系教授羅伯特 弗洛伊德命名。通過乙個圖的權值矩陣求出它的每兩點間的最短路徑 矩陣。從圖的帶權鄰接矩陣a a ...