hdu 2544 最短路 Dijkstra算法
生活随笔
收集整理的這篇文章主要介紹了
hdu 2544 最短路 Dijkstra算法
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最短路
Time Limit: 5000/1000 MS (Java/Others)??? Memory Limit: 32768/32768 K (Java/Others)
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?解題思路:先初始化任意兩點間的距離為inf,且各個點都未訪問,然后更新有連線的點之間的距離。從1開始查找,找到一個距離它最近的點就標記一下,避免重復查找。AC代碼:#include<stdio.h> #include<string.h> #define inf 0x3f3f3f3f int map[105][105],d[105],vis[105]; int n,m; int dijkstra() {memset(vis,0,sizeof(vis)); //初始化剛開始都未訪問過for(int i=0;i<=n;i++)d[i]=(i==1?0:inf);//d[i]表示從1到i點要走的距離for(int i=1;i<=n;i++){int x;int min=inf;for(int j=1;j<=n;j++)if(!vis[j]&&d[j]<min) //如果j點未訪問,且1到j的距離比min小{min=d[j];x=j;}vis[x]=1;//從1開始查找for(int y=1;y<=n;y++)d[y]=d[y]<(d[x]+map[x][y])?d[y]:d[x]+map[x][y];}return d[n]; } int main() {int i,minsum,u,v,w;while(~scanf("%d%d",&n,&m)){if(m==0&&n==0) break;memset(map,inf,sizeof(map));//初始任意兩點的距離為inffor(i=0;i<m;i++){scanf("%d%d%d",&u,&v,&w);map[u][v]=map[v][u]=w;//a->b和b->a的距離都為c}minsum=dijkstra();printf("%d\n",minsum);}return 0; }
?第一次用到Dijkstra,表示這個東西不好理解。
總結
以上是生活随笔為你收集整理的hdu 2544 最短路 Dijkstra算法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: NYOJ 14 会场安排问题
- 下一篇: 金融资讯数据服务平台建设实践