暢通工程續 HDU 1874 (迪傑斯特拉)

2021-08-06 03:40:29 字數 2105 閱讀 8253

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

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

input

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

每組資料第一行包含兩個正整數n和m(0 < n<200,0< m< 1000),分別代表現有城鎮的數目和已修建的道路的數目。城鎮分別以0~n-1編號。

接下來是m行道路資訊。每一行有三個整數a,b,x(0 <= a,b< n,a!=b,0< x<10000),表示城鎮a和城鎮b之間有一條長度為x的雙向道路。

再接下一行有兩個整數s,t(0 <= s,t< n),分別代表起點和終點。

output

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

sample input

3 30 1 1

0 2 3

1 2 1

0 23 1

0 1 1

1 2sample output2-1

常規迪傑特斯拉

#include

using

namespace std;

#define clr(a) memset(a, 0, sizeof(a))

const

int maxn =

1e3+10;

const

int inf =

0x3f3f3f3f

;int n, m, st, ed;

int mp[maxn]

[maxn]

, dis[maxn]

;bool vis[maxn]

;int

dij(

int st)

for(

int i =

1; i < n; i++)}

vis[pos]

=true

;for

(int k =

0; k < n; k++)}

}}intmain()

mp[i]

[i]=0;

}for

(int i =

0; i < m; i++

)scanf

("%d%d"

,&st,

&ed)

;dij

(st)

;int ans =-1

;if(dis[ed]

< inf) ans = dis[ed]

;printf

("%d\n"

, ans);}

return0;

}

迪傑特斯拉 + 優先佇列優化

#include

#include

#include

#include

#include

#define inf 0x3f3f3f3f

#define max 110

using

namespace std;

struct pair

}pr,ne;

int n,m;

vector<

int> edge[max]

;//存與之相連的邊

int length[max]

[max]

;//存相連邊的長度

int dis[max]

;//記錄到起點的距離

int st,ed;

void

dijkstra

(int n)}}

}int

main()

scanf

("%d%d"

,&st,

&ed)

;dijkstra

(st);if

(dis[ed]

printf (

"%d\n"

,dis[ed]);

else

printf

("-1\n");

}return0;

}

HDU 1874 暢通工程續(迪傑斯特拉)

某省自從實行了很多年的暢通工程計畫後,終於修建了很多路。不過路多了也不好,每次要從乙個城鎮到另乙個城鎮時,都有許多種道路方案可以選擇,而某些方案要比另一些方案行走的距離要短很多。這讓行人很困擾。現在,已知起點和終點,請你計算出要從起點到終點,最短需要行走多少距離。input本題目包含多組資料,請處理...

暢通工程續 HDU 1874 迪傑特斯拉2

某省自從實行了很多年的暢通工程計畫後,終於修建了很多路。不過路多了也不好,每次要從乙個城鎮到另乙個城鎮時,都有許多種道路方案可以選擇,而某些方案要比另一些方案行走的距離要短很多。這讓行人很困擾。現在,已知起點和終點,請你計算出要從起點到終點,最短需要行走多少距離。input 本題目包含多組資料,請處...

hdu 1874 暢通工程續

題目 就是裸的單源最短路。做的時候還是遇到了一些錯誤。比如題目上說的,每次要從乙個城鎮到另乙個城鎮時,都有許多種道路方案可以選擇,而某些方案要比另一些方案行走的距離要短很多。應該在輸入的時候就要更新a b的最短距離。還有一開始開了個n 0x7fffffff 這種題肯定是不行的。因為這個數和其他數相加...