最短路 (HDU

阅读: 评论:0

最短路 (HDU

最短路 (HDU

目录

  • 题目
  • 输入
  • 输出
  • 思路
  • 代码

题目

在每年的校赛里,所有进入决赛的同学都会获得一件很漂亮的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
题目链接:HDU-2544

思路

直接用Dijkstra算法

代码

#include<cstdio>
#include<cstdlib>
#include<cstring>
const int maxn=1e6+5;
const int N=10000;
const int inf=0x3f3f3f;
int n,m,v,u,w;
struct node
{int to;int next;int len;
}edge[maxn];
int head[maxn];
int cot=0;
void addedge(int u,int v,int w)
{edge[cot].to=v;edge[cot].next=head[u];edge[cot].len=w;head[u]=cot++;
}int a[N],b[N];
void diji(int s)
{for(int i=1; i<=n; i++) a[i]=inf,b[i]=0;a[s]=0;while(1){int k=-1,len=inf;for(int i=1; i<=n; i++){if(b[i]==0 && len>a[i]){k=i;len=a[i];}}if(k==-1) break;b[k]=1;for(int i=head[k]; i!=-1; i=edge[i].next){int t=edge[i].to;if(!b[t] && a[t]>a[k]+edge[i].len)a[t]=a[k]+edge[i].len;}}
}int main()
{while(~scanf("%d%d",&n,&m)){if(n==0 && m==0) break;memset(head,-1,sizeof(head));while(m--){scanf("%d%d%d",&u,&v,&w);addedge(u,v,w);addedge(v,u,w);}diji(1);printf("%dn",a[n]);}return 0;
}

本文发布于:2024-01-31 10:43:09,感谢您对本站的认可!

本文链接:https://www.4u4v.net/it/170666899027946.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:HDU
留言与评论(共有 0 条评论)
   
验证码:

Copyright ©2019-2022 Comsenz Inc.Powered by ©

网站地图1 网站地图2 网站地图3 网站地图4 网站地图5 网站地图6 网站地图7 网站地图8 网站地图9 网站地图10 网站地图11 网站地图12 网站地图13 网站地图14 网站地图15 网站地图16 网站地图17 网站地图18 网站地图19 网站地图20 网站地图21 网站地图22/a> 网站地图23