演算法7 16 弗洛伊德最短路徑演算法

2021-08-29 18:05:47 字數 893 閱讀 8738

題目描述

在帶權有向圖g中,求g中的任意一對頂點間的最短路徑問題,也是十分常見的一種問題。

解決這個問題的乙個方法是執行n次迪傑斯特拉演算法,這樣就可以求出每一對頂點間的最短路徑,執行的時間複雜度為o(n3)。

而另一種演算法是由弗洛伊德提出的,時間複雜度同樣是o(n3),但演算法的形式簡單很多。

在本題中,讀入乙個有向圖的帶權鄰接矩陣(即陣列表示),建立有向圖並按照以上描述中的演算法求出每一對頂點間的最短路徑長度。

輸入輸入的第一行包含1個正整數n,表示圖中共有n個頂點。其中n不超過50。

以後的n行中每行有n個用空格隔開的整數。對於第i行的第j個整數,如果大於0,則表示第i個頂點有指向第j個頂點的有向邊,且權值為對應的整數值;如果這個整數為0,則表示沒有i指向j的有向邊。當i和j相等的時候,保證對應的整數為0。

輸出共有n行,每行有n個整數,表示源點至每乙個頂點的最短路徑長度。如果不存在從源點至相應頂點的路徑,輸出-1。對於某個頂點到其本身的最短路徑長度,輸出0。

請在每個整數後輸出乙個空格,並請注意行尾輸出換行。

樣例輸入

4

0 3 0 1

0 0 4 0

2 0 0 0

0 0 1 0

樣例輸出

0 3 2 1 

6 0 4 7

2 5 0 3

3 6 1 0

ac**

#include

#include

#define n 999999

int a[55][55];

int d[55],book[55];

int main()

}for(i=0;iprintf("\n");

t++;}}

演算法7 16 弗洛伊德最短路徑演算法(模板)

題目描述 在帶權有向圖g中,求g中的任意一對頂點間的最短路徑問題,也是十分常見的一種問題。解決這個問題的乙個方法是執行n次迪傑斯特拉演算法,這樣就可以求出每一對頂點間的最短路徑,執行的時間複雜度為o n3 而另一種演算法是由弗洛伊德提出的,時間複雜度同樣是o n3 但演算法的形式簡單很多。在本題中,...

問題 B 演算法7 16 弗洛伊德最短路徑演算法

在帶權有向圖g中,求g中的任意一對頂點間的最短路徑問題,也是十分常見的一種問題。解決這個問題的乙個方法是執行n次迪傑斯特拉演算法,這樣就可以求出每一對頂點間的最短路徑,執行的時間複雜度為o n3 而另一種演算法是由弗洛伊德提出的,時間複雜度同樣是o n3 但演算法的形式簡單很多。可以將弗洛伊德演算法...

問題 B 演算法7 16 弗洛伊德最短路徑演算法

時間限制 1 sec 記憶體限制 32 mb 提交 169 解決 99 提交 狀態 討論版 命題人 外部匯入 在帶權有向圖g中,求g中的任意一對頂點間的最短路徑問題,也是十分常見的一種問題。解決這個問題的乙個方法是執行n次迪傑斯特拉演算法,這樣就可以求出每一對頂點間的最短路徑,執行的時間複雜度為o ...