HDU-2112 HDU DAY-----最短路问题
2012-07-13 12:43
369 查看
HDU Today
Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 5634 Accepted Submission(s): 1369
[align=left]Problem Description[/align]
经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强。这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市浬浦镇陶姚村买了个房子,开始安度晚年了。
这样住了一段时间,徐总对当地的交通还是不太了解。有时很郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(其实徐总自己有车,却一定要与民同乐,这就是徐总的性格)。
徐总经常会问蹩脚的英文问路:“Can you help me?”。看着他那迷茫而又无助的眼神,热心的你能帮帮他吗?
请帮助他用最短的时间到达目的地(假设每一路公交车都只在起点站和终点站停,而且随时都会开)。
[align=left]Input[/align]
输入数据有多组,每组的第一行是公交车的总数N(0<=N<=10000);
第二行有徐总的所在地start,他的目的地end;
接着有n行,每行有站名s,站名e,以及从s到e的时间整数t(0<t<100)(每个地名是一个长度不超过30的字符串)。
note:一组数据中地名数不会超过150个。
如果N==-1,表示输入结束。
[align=left]Output[/align]
如果徐总能到达目的地,输出最短的时间;否则,输出“-1”。
[align=left]Sample Input[/align]
6
xiasha westlake
xiasha station 60
xiasha ShoppingCenterofHangZhou 30
station westlake 20
ShoppingCenterofHangZhou supermarket 10
xiasha supermarket 50
supermarket westlake 10
-1
[align=left]Sample Output[/align]
50
Hint:
The best route is:
xiasha->ShoppingCenterofHangZhou->supermarket->westlake
虽然偶尔会迷路,但是因为有了你的帮助
**和**从此还是过上了幸福的生活。
――全剧终――
[align=left]Author[/align]
lgx
[align=left]Source[/align]
ACM程序设计_期末考试(时间已定!!)
[align=left]Recommend[/align]
lcy
这题目的新颖之处,就主要是怎么样把字符串转译成数字抽象成的点,可以用s[ i][ ]来抽象点。而用i来表示是第几个点,剩下的就可以用DIJKSCAL来解决了。
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <math.h> #include <string> #define inf 0x3fffffff int S=1,E=2,temp; char s[200][35]; int dis[200]; int visit[200]; int T;//边的个数 int map[200][200]; int find(char *a) { int i; for(i=1;i<temp;i++) { if(strcmp(s[i],a)==0) return i; } strcpy(s[temp],a); return temp++; } int dijkscal() { int i; int j; int n=temp-1; for(i=1;i<=n;i++) dis[i]=inf; dis[S]=0; for(j=1;j<n;j++) { int t=inf; int pos; for(i=1;i<=n;i++) { if(!visit[i]&&t>dis[i]) { t=dis[i]; pos=i; } } visit[pos]=1; if(pos==2) return dis[E]; for(i=1;i<=n;i++) { if(!visit[i]&&map[pos][i]&&dis[i]>dis[pos]+map[pos][i]) { dis[i]=dis[pos]+map[pos][i]; } } } return dis[E]; } int main() { char a[35],b[35],sta[35],end[35]; int i; int m; while(scanf("%d",&T)&&T!=-1) { temp=1; char o=getchar(); memset(s,0,sizeof(s)); memset(visit,0,sizeof(visit)); memset(map,0,sizeof(map)); scanf("%s%s",sta,end); S=find(sta); E=find(end); for(i=1;i<=T;i++) { scanf("%s%s%d",a,b,&m); int k=find(a),kk=find(b); map[k][kk]=m; map[kk][k]=m; } int ans=dijkscal(); if(ans!=inf) printf("%d\n",ans); else printf("-1\n"); } return 0; }
相关文章推荐
- HDU-2112 HDU Today 最短路问题
- HDU 2112 HDU Today 最短路问题map+floyd
- HDU_1874_畅通工程续_最短路问题
- (HDU 2680、HDU 1599、hdu2066,POJ 1125)n元最短路问题
- hdu3790双权值最短路问题
- HDU-3790-最短路问题
- 最短路问题 以hdu1874为例
- HDU - 1874 -最短路问题
- hdu(2112)最短路径问题
- 最短路问题 以hdu1874为例
- HDU 4370 0,1规划转换成最短路问题
- HDU 1874 畅通工程续(最短路问题 Dijkstra算法) O(V*E)
- HDU 2066 一个人的旅行 最短路问题
- HDU 2680 Choose the best route 最短路问题
- hdu 2680 Choose the best route (最短路问题 dijkstra | spfa)
- hdu 2544 最短路问题
- HDU - 2680 - Choose the best route (经典最短路问题dijkstra算法!!)
- HDU 3631(Shortest Path) 最短路问题 (Floyd)
- HDU1596 find the safest road 最短路问题Dijskra+最小堆
- hdu 1874 最短路问题 地杰斯特拉算法及其heap优化