HDU 2112-HDU Today
来源:互联网 发布:python 周期性任务 编辑:程序博客网 时间:2024/05/21 22:23
HDU Today
Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 32139 Accepted Submission(s): 7836
Problem Description
经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强。这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬浦镇陶姚村买了个房子,开始安度晚年了。
这样住了一段时间,徐总对当地的交通还是不太了解。有时很郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(其实徐总自己有车,却一定要与民同乐,这就是徐总的性格)。
徐总经常会问蹩脚的英文问路:“Can you help me?”。看着他那迷茫而又无助的眼神,热心的你能帮帮他吗?
请帮助他用最短的时间到达目的地(假设每一路公交车都只在起点站和终点站停,而且随时都会开)。
这样住了一段时间,徐总对当地的交通还是不太了解。有时很郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(其实徐总自己有车,却一定要与民同乐,这就是徐总的性格)。
徐总经常会问蹩脚的英文问路:“Can you help me?”。看着他那迷茫而又无助的眼神,热心的你能帮帮他吗?
请帮助他用最短的时间到达目的地(假设每一路公交车都只在起点站和终点站停,而且随时都会开)。
Input
输入数据有多组,每组的第一行是公交车的总数N(0<=N<=10000);
第二行有徐总的所在地start,他的目的地end;
接着有n行,每行有站名s,站名e,以及从s到e的时间整数t(0<t<100)(每个地名是一个长度不超过30的字符串)。
note:一组数据中地名数不会超过150个。
如果N==-1,表示输入结束。
第二行有徐总的所在地start,他的目的地end;
接着有n行,每行有站名s,站名e,以及从s到e的时间整数t(0<t<100)(每个地名是一个长度不超过30的字符串)。
note:一组数据中地名数不会超过150个。
如果N==-1,表示输入结束。
Output
如果徐总能到达目的地,输出最短的时间;否则,输出“-1”。
Sample Input
6
xiasha westlake
xiasha station 60
xiasha ShoppingCenterofHangZhou 30
station westlake 20
ShoppingCenterofHangZhou supermarket 10
xiasha supermarket 50
supermarket westlake 10
-1
Sample Output
50
Hint:
The best route is:
xiasha->ShoppingCenterofHangZhou->supermarket->westlake
虽然偶尔会迷路,但是因为有了你的帮助
**和**从此还是过上了幸福的生活。
――全剧终――
6
xiasha westlake
xiasha station 60
xiasha ShoppingCenterofHangZhou 30
station westlake 20
ShoppingCenterofHangZhou supermarket 10
xiasha supermarket 50
supermarket westlake 10
-1
Sample Output
50
Hint:
The best route is:
xiasha->ShoppingCenterofHangZhou->supermarket->westlake
虽然偶尔会迷路,但是因为有了你的帮助
**和**从此还是过上了幸福的生活。
――全剧终――
分析:
这题真是让我脑袋昏沉,首先,我很快写出了它,却花费几个小时来找 bug ,我这个人一不开心就喜欢暴饮暴食,不管饿不饿,然后眼看天色暗下来,丝毫没有食欲的我选择离开电脑去吃点东西缓解一下焦急的心情,然后回来,听完一个多小时的分享,再重新看本题的代码,很快就找到了。
首先先说两点注意的小地方:
第一个就是写代码尽量不要出现带颜色的关键字,比如这题中的 ans ,我本来准备用 count ,但是不行,给我报一堆我看不懂的东西,改了就好了。
第二个就是字符串问题,我们都知道到 string 类型的字符串比较的时候可以直接用 ==,但是 char 类型定义的字符串不行,(本题就是 wa 在这,耗了我几个小时),字符串比较的话就用 strcmp 函数。
总结来说,就是在前进的路上总是被小水沟溅一身泥,前两天做搜索的时候,忘了一个 getchar ,浪费了我半天时间,哎。。。。下次的更细心咯,希望看到的小伙伴们不要经常犯我这样的错误,做题千万要仔细哦。
本题不同于别的 dijkstra 的一点就是出入的点不是整数类型,而是字符串类型,我们只要用一个 map 来映射一下就好,因为刚开始我的代码还有超时的错误,所以写的过程中我也多添了两个 if ,一个是判断两地是否相等,再一个就是在 dijkstra 中找最短路径缩短其他点的距离的时候,如果找到INF 直接就跳出 。哎,我好伤心。。。。
#include <iostream>#include<stdio.h>#include<string>#include<string.h>#include<map>using namespace std;#define INF 0x3f3f3f3fint map1[155][155];int ans;void Dijkstra(){ int vis[155],bj,dis[155],min1; for(int i=1;i<=ans;i++) { dis[i]=map1[1][i];///初始化dis数组 } memset(vis,0,sizeof(vis)); vis[1]=1;///我们是以起始点为源点,所以先将起始点标记 for(int i=1;i<=ans;i++) { min1=INF; for(int j=1;j<=ans;j++) { if(dis[j]<min1&&!vis[j]) { min1=dis[bj=j]; } } if(min1==INF) break; vis[bj]=1; for(int j=1;j<=ans;j++)///更新距离 { if(!vis[j]&&dis[j]>dis[bj]+map1[bj][j]) dis[j]=dis[bj]+map1[bj][j]; } } if(dis[2]<INF) printf("%d\n",dis[2]); else printf("-1\n");}int main(){ int d,n; int f; char s1[35],e1[35]; while(~scanf("%d",&n)&&(n!=-1)) { map<string,int> q;///定义一个map数组 f=0; for(int i=1;i<=155;i++) { for(int j=1;j<=155;j++) { if(i==j) map1[i][j]=0; else map1[i][j]=INF; } } scanf("%s %s",s1,e1); if(strcmp(s1,e1)==0)///用于判断两地是否一样,如果一样就直接输出0 f=1; q[s1]=1;///将起始点和目的地映射为1,2 q[e1]=2; ans=3; for(int i=1;i<=n;i++) { scanf("%s %s %d",s1,e1,&d); if(!q[s1])///如果该地没有被映射过,就一一换成int类型,方便判断,ans的终值也可以代表有多少个地方 q[s1]=ans++; if(!q[e1]) q[e1]=ans++; map1[q[s1]][q[e1]]=map1[q[e1]][q[s1]]=d;///双向记录距离 } if(f) printf("0\n"); else Dijkstra(); } return 0;}
阅读全文
0 0
- HDU 2112 HDU Today
- hdu 2112 HDU Today
- Hdu-2112 HDU Today
- hdu 2112 HDU Today
- HDU 2112 HDU Today
- hdu 2112 HDU Today
- HDU 2112 HDU Today
- hdu 2112 HDU Today
- HDU 2112 HDU Today
- HDU 2112 HDU Today
- HDU 2112 HDU Today
- hdu 2112 hdu today
- hdu 2112 HDU Today
- hdu 2112 HDU Today
- hdu 2112 HDU Today
- hdu 2112 HDU Today
- HDU 2112 HDU Today
- hdu 2112:HDU Today
- 读书02《微习惯》
- Qt如何显示一个动态的变量或者说定时刷新界面
- BZOJ 3140 消毒 (二进制枚举降维 二分图最大匹配)
- Python difflib模块
- Java连接MySQL数据库——含步骤和代码
- HDU 2112-HDU Today
- ConcurrentHashMap源码详解
- 进程和线程,vmstat,iostat,dstat,
- GTK显示GIF、GTK动画(图片连续播放)
- emoji表情存入数据库
- [FJOI2007]轮状病毒
- 9.08 笔记-抽象类与接口与多态
- Java设计模式_(行为型)_观察者模式
- 【codevs 2451】互不侵犯