hdu 2544最短路(Dijkstra)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 最短路
? ? ? ? ? ? ? ? ? ?Time Limit: 5000/1000 MS (Java/Others)????Memory Limit: 32768/32768 K (Java/Others)
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?Total Submission(s): 45792????Accepted Submission(s): 20193
Problem Description
在每年的校賽里,所有進入決賽的同學都會獲得一件很漂亮的t-shirt。但是每當我們的工作人員把上百件的衣服從商店運回到賽場的時候,卻是非常累的!所以現在他們想要尋找最短的從商店到賽場的路線,你可以幫助他們嗎?
Input
輸入包括多組數據。每組數據第一行是兩個整數N、M(N<=100,M<=10000),N表示成都的大街上有幾個路口,標號為1的路口是商店所在地,標號為N的路口是賽場所在地,M則表示在成都有幾條路。N=M=0表示輸入結束。接下來M行,每行包括3個整數A,B,C(1<=A,B<=N,1<=C<=1000),表示在路口A與路口B之間有一條路,我們的工作人員需要C分鐘的時間走過這條路。
輸入保證至少存在1條商店到賽場的路線。
Output
對于每組輸入,輸出一行,表示工作人員從商店走到賽場的最短時間
Sample Input
2 1 1 2 3 3 3 1 2 5 2 3 5 3 1 2 0 0
Sample Output
3 2
這道題Floyd也可以
AC代碼:
#include<cstdio> using namespace std; #define INF 0xFFFFFFF int main() {int N,M,A,B,C;int i,j,k;int s[101][101],dis[101],book[101];int min;while(scanf("%d %d",&N,&M),N||M){for(i=1;i<=N;i++){for(j=1;j<=N;j++)if(i==j)s[i][j]=0;else s[i][j]=INF;}for(i=0;i<M;i++){scanf("%d %d %d",&A,&B,&C);if(C<s[A][B])s[A][B]=s[B][A]=C;}for(i=1;i<=N;i++){dis[i]=s[1][i];book[i]=0;}book[1]=1;for(i=1;i<=N;i++){min=INF;for(j=1;j<=N;j++)if(!book[j] && dis[j]<min){k=j;min=dis[j];}book[k]=1;for(j=1;j<=N;j++)if(!book[j] && dis[k]+s[k][j]<dis[j])dis[j]=dis[k]+s[k][j];}printf("%d\n",dis[N]);}return 0; }?
?
總結
以上是生活随笔為你收集整理的hdu 2544最短路(Dijkstra)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JEECG十二个开源项目下载大全
- 下一篇: The Magic Tower