HDOJ1874通訊工程 弗洛伊達演算法應用

2021-08-08 12:31:32 字數 1160 閱讀 7577

problem description

某省自從實行了很多年的暢通工程計畫後,終於修建了很多路。不過路多了也不好,每次要從乙個城鎮到另乙個城鎮時,都有許多種道路方案可以選擇,而某些方案要比另一些方案行走的距離要短很多。這讓行人很困擾。

現在,已知起點和終點,請你計算出要從起點到終點,最短需要行走多少距離。

input

本題目包含多組資料,請處理到檔案結束。

每組資料第一行包含兩個正整數n和m(0

output

對於每組資料,請在一行裡輸出最短需要行走的距離。如果不存在從s到t的路線,就輸出-1.

sample input

3 3

0 1 1

0 2 3

1 2 1

0 23 1

0 1 1

1 2

sample output

2

-1

解題思路:

本題很明顯是在求最小路徑,首推弗洛伊德演算法,資料結構僅需要乙個二維陣列即可搞定。這裡需要注意一下兩點:1.如果圖是無向圖,在給road矩陣賦值時,一定記住其對稱位置一定也要賦值,例如road[1][3]=4,那麼road[3][1]也要賦值4,否則road[3][1]=inf,1到3是單向可達的,出錯。2.要有異常輸入的處理能力。很明顯road對角線上都是0,如果輸入時兩個一樣的值,因為road[i][i]>x不成立,所以road[i][i]還是0.好的,以下是**!

#includeusing namespace std;

int road[205][205];

int n, m;

const int inf = 0x3f3f3f3f;//通常設定乙個正無限值這麼設定

int main()

else

}} for (int i = 0; i < m; i++)

}cin >> start >> end;

for (int k = 0; k < n; k++)}}

} if (road[start][end] != inf)

else

} return 0;

}

hdoj1874 暢通工程續

dijsktra演算法 偽 清除所有標記 d 0 0,其他d i intmax for 1到n dijkstra演算法的應用 include using namespace std const int max 201 const int intmax 10000000 int map max max...

HDOJ 1874 最短路問題

題目大意 輸入n,m,分別表示有編號 0 n 1 n個城鎮和m調街道,接下來輸入m條道路及其所花費的時間,之後輸入起點和終點,最後求出從起點到終點所花費的最短時間。演算法思想 迪傑斯特拉演算法 1.根據輸入資訊建立鄰接矩陣,為無向圖。此處需要注意會有道路覆蓋的問題,此時應用花費時間最小的道路。2.用...

HDOJ1874 暢通工程續

題目鏈結 求單源最短路的題,因為邊權非負,所以可以用dijkstra。這題有一點需要注意的地方是有重邊,在讀資料時取較小的即可。view code 1 include 2 include 3 define min a,b a 4 define n 200 5 define inf 2000000 6...