HDU 2544 最短路(多种解法)
来源:互联网 发布:阿国网络随笔博客 编辑:程序博客网 时间:2024/06/07 20:23
最短路
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 72444 Accepted Submission(s): 31637
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条商店到赛场的路线。
输入保证至少存在1条商店到赛场的路线。
Output
对于每组输入,输出一行,表示工作人员从商店走到赛场的最短时间
Sample Input
2 11 2 33 31 2 52 3 53 1 20 0
Sample Output
32
Source
UESTC 6th Programming Contest Online
Recommend
lcy | We have carefully selected several similar problems for you: 2066 1874 1217 2112 1142
#include<stdio.h>#include<iostream>#include<algorithm>#include<string.h>using namespace std;#define maxn 105#define inf 0x3f3f3f3fint n,m;int flag[maxn],dis[maxn],w[maxn][maxn];void dijkstra(){ for(int i=1; i<=n; i++) dis[i]=(i==1?0:inf); memset(flag,0,sizeof(flag)); for(int i=0; i<n; i++) { int cur,tmp=inf; for(int j=1; j<=n; j++) if(!flag[j]&&dis[j]<=tmp) tmp=dis[cur=j]; flag[cur]=1; for(int i=1; i<=2*n; i++) dis[i]=min(dis[i],dis[cur]+w[cur][i]); }}int main(){ //freopen("in.txt","r",stdin); while(cin>>n>>m&&n+m) { memset(w,inf,sizeof(w)); int x,y,t; for(int i=0; i<m; i++) { cin>>x>>y>>t; w[x][y]=w[y][x]=t; } dijkstra(); printf("%d\n",dis[n]); } return 0;}
#include<stdio.h>#include<iostream>#include<string.h>#include<queue>#include<vector>using namespace std;#define maxn 1005#define inf 0x3f3f3f3fstruct node{ int to,val; node() {} node(int a,int b) { to=a; val=b; } friend bool operator <(node a,node b) { return a.val<b.val; }};int n,m;vector<node> v[maxn];int d[maxn];void dijkstra(int s){ priority_queue<node> q; memset(d,inf,sizeof(d)); d[s]=0; q.push(node(s,d[s])); while(!q.empty()) { node x=q.top(); q.pop(); for(int i=0; i<v[x.to].size(); i++) { node y=v[x.to][i]; if(d[y.to]>x.val+y.val) { d[y.to]=x.val+y.val; q.push(node(y.to,d[y.to])); } } }}int main(){ //freopen("in.txt","r",stdin); while(~scanf("%d%d",&n,&m)&&n+m) { for(int i=0; i<=n; i++) v[i].clear(); int a,b,c; for(int i=0; i<m; i++) { scanf("%d%d%d",&a,&b,&c); v[a].push_back(node(b,c)); v[b].push_back(node(a,c)); } dijkstra(1); printf("%d\n",d[n]); } return 0;}
#include<stdio.h>#include<iostream>#include<string.h>#include<queue>using namespace std;#define maxn 1005#define inf 0x3f3f3f3fstruct edge{ int to,val,next;} edges[maxn*maxn];struct node{ int to,val; node() {} node(int a,int b) { to=a; val=b; } friend bool operator<(node a,node b) { return a.val>b.val; }};int head[maxn],d[maxn],flag[maxn];int n,m,cnt;void add(int u,int v,int w){ edges[cnt].to=v; edges[cnt].val=w; edges[cnt].next=head[u]; head[u]=cnt++;}void dijkstra(){ priority_queue<node> q; memset(flag,0,sizeof(flag)); memset(d,inf,sizeof(d)); d[1]=0; q.push(node(1,0)); while(!q.empty()) { node x=q.top(); q.pop(); if(flag[x.to]) continue; flag[x.to]=1; for(int i=head[x.to]; ~i; i=edges[i].next) { int cur=edges[i].to; int value=edges[i].val; if(d[cur]>d[x.to]+value) { d[cur]=d[x.to]+value; q.push(node(cur,d[cur])); } } } printf("%d\n",d[n]);}int main(){ //freopen("in.txt","r",stdin); while(cin>>n>>m&&n+m) { memset(head,-1,sizeof(head)); cnt=0; int a,b,c; for(int i=0; i<m; i++) { scanf("%d%d%d",&a,&b,&c); add(a,b,c); add(b,a,c); } dijkstra(); } return 0;}
#include<stdio.h>#include<iostream>#include<algorithm>#include<string.h>using namespace std;#define maxn 1005#define inf 0x3f3f3f3fint n,m;int val[maxn][maxn];void floyd(){ for(int k=1; k<=n; k++) for(int i=1; i<=n; i++) for(int j=1; j<=n; j++) val[i][j]=min(val[i][j],val[i][k]+val[k][j]);}int main(){ //freopen("in.txt","r",stdin); while(~scanf("%d%d",&n,&m)&&n+m) { memset(val,inf,sizeof(val)); int a,b,c; for(int i=0; i<m; i++) { scanf("%d%d%d",&a,&b,&c); val[a][b]=val[b][a]=c; } floyd(); printf("%d\n",val[1][n]); } return 0;}
阅读全文
0 0
- HDU 2544 最短路(多种解法)
- HDU 2544 最短路 (多种解法)
- HDU 2544 最短路 迪杰斯特拉解法
- (重刷)HDU 1874 畅通工程续 + HDU 2544 最短路 最短路水题,dijkstra解法。
- HDU 2544 关于最短路的三种解法
- HDU 2544 最短路 (单源最短路)
- 最短路 (HDU 2544)
- hdu 2544(最短路)
- (HDU-2544)最短路
- 【HDU】-2544-最短路(最短路)(dijkstra)
- hdu 2544 最短路(最短路第一弹)
- hdu 2544 最短路 (diskstra求最短路)
- HDU 2544-最短路(最短路spfa)
- hdu 2544 最短路(最短路算法之Dijkstra)
- HDU 2544 最短路(最短路 Floyd)
- HDU 2544 最短路(最短路/spfa)
- 最短路 2544hdu
- HDU 2544 最短路
- C#中数据类型
- OSG3.4.0+QT5.8.0+VS2013+WIN10 64BIT
- 生成器&迭代器
- MyBatis起步
- Android——systrace使用分析
- HDU 2544 最短路(多种解法)
- Java VisualVM 安装 plugins Visual GC
- Kafka运行机制与各组件详解
- 327. Count of Range Sum
- Eureka 消费端demo
- impdp 虚拟列含包体数据导入
- Jzoj5246 Trip
- Java之调用天气API及解析JSON数据
- MyBatis XML方式的基本用法