HDU 2544 最短路
来源:互联网 发布:神经网络算法实例说明 编辑:程序博客网 时间:2024/06/03 23:00
最短路
Time Limit: 5000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 68128 Accepted Submission(s): 29787
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
今天学了最短路,感觉这个东西很神奇~~~Floyd算法很简单,而Dijkstra(这名字咋读?)也可以,有点广搜的味道~
这道题就是很基本的最短路问题,分别用了这两种算法实现。
Floyd短小精悍
这道题就是很基本的最短路问题,分别用了这两种算法实现。
Floyd短小精悍
#include<iostream>#include<cstring>using namespace std;const int inf=0x3f3f3f3f;int main(){ int n,m; while(~scanf("%d%d",&n,&m)){ if(!n&&!m) break; int map[150][150]; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ map[i][j]=inf; } } while(m--){ int a,b,c; cin>>a>>b>>c; map[a][b]=map[b][a]=c; } for(int k=1;k<=n;k++){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(map[i][j]>map[i][k]+map[k][j]){ map[i][j]=map[i][k]+map[k][j]; } } } } cout<<map[1][n]<<endl; }}Dijkstra算法
#include<iostream>#include<cstdio>#include<cstring>using namespace std;const int inf=0x3f3f3f3f;int main(){int n,m;while(~scanf("%d%d",&n,&m)){if(!n&&!m) break;int map[110][110];int book[110];int dis[110];for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){map[i][j]=map[j][i]=inf;}}while(m--){int a,b,c;cin>>a>>b>>c;map[a][b]=map[b][a]=c;}for(int i=1;i<=n;i++) dis[i]=map[1][i];memset(book,0,sizeof(book));book[1]=1;int flag=0;for(int i=1;i<=n-1;i++){int minn=inf;for(int j=1;j<=n;j++){if(!book[j]&&dis[j]<minn){minn=dis[j];flag=j;}}book[flag]=1;for(int i=1;i<=n;i++){if(map[flag][i]<inf){if(dis[i]>dis[flag]+map[flag][i]){dis[i]=dis[flag]+map[flag][i];}}}}cout<<dis[n]<<endl;}}
SPFA算法
#include<iostream>#include<cstdio>#include<cstring>#include<queue>using namespace std;const int inf=0x3f3f3f3f;int map[1010][1010];int dis[1010];int book[1010];int n,m;void spfa(){memset(book,0,sizeof(book));queue<int> que;for(int i=0;i<=n;i++) dis[i]=inf;dis[1]=0;book[1]=1;que.push(1);while(!que.empty()){int now=que.front();que.pop();for(int i=1;i<=n;i++){if(dis[i]>dis[now]+map[now][i]){dis[i]=dis[now]+map[now][i];if(!book[i]){book[i]=1;que.push(i);}}}book[now]=0;} return;}int main(){while(~scanf("%d%d",&n,&m)){if(!n&&!m) break;for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){map[i][j]=inf;}}for(int i=1;i<=m;i++){int a,b,len;scanf("%d%d%d",&a,&b,&len);map[a][b]=map[b][a]=len;}spfa();cout<<dis[n]<<endl;}}
阅读全文
0 0
- 最短路 2544hdu
- HDU 2544 最短路
- HDU-2544 最短路
- Hdu-2544 最短路
- HDU 2544 最短路
- hdu 2544 最短路
- HDU 2544 ( 最短路 )
- hdu 2544 最短路
- HDU 2544 最短路
- hdu 2544 最短路
- hdu 2544 最短路
- HDU 2544 最短路
- hdu 2544 最短路
- HDU 2544 最短路
- hdu 2544 最短路
- HDU 2544 最短路
- hdu 2544 最短路
- hdu 2544 最短路
- C Primer Plus 6 笔记——可移植类型:stdint.h和inttypes.h
- 银行卡扫一扫识别OCR技术
- HDU 6035(2017多校第一场)。color tree (树形dp)
- C
- Java中double[]和Double[]内存占用分析
- HDU 2544 最短路
- springmvc之处理模型数据
- 十三、常用的运算符
- linux下终端分屏使用的两种方法(screen和tmux)
- 博客的理解
- POJ 3009:Curling 2.0
- MYSQL学习笔记(二十三)字符集和校对
- Windows下安装Vim插件管理Vundle及常用插件
- TCP/IP四层模型