HDU 2112 HDU Today,最短路径算法,Dijkstra
2014-06-28 01:06
429 查看
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2112
Total Submission(s): 13396 Accepted Submission(s): 3144
[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
虽然偶尔会迷路,但是因为有了你的帮助
**和**从此还是过上了幸福的生活。
――全剧终――
分析:题目意思很简单,求最短路,要注意的是顶点名称都换成了字符串,要重新标记,还有就是起点和终点重合的情况需要考虑。
问题:用string来存储字符串应该是很方便的,但是不知道为什么全部用string来表示,用cin输入无限超时啊。后面改为字符数组了然后用scanf居然就过了,太坑爹。
代码如下:
View Code
HDU Today
Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 13396 Accepted Submission(s): 3144
[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
虽然偶尔会迷路,但是因为有了你的帮助
**和**从此还是过上了幸福的生活。
――全剧终――
分析:题目意思很简单,求最短路,要注意的是顶点名称都换成了字符串,要重新标记,还有就是起点和终点重合的情况需要考虑。
问题:用string来存储字符串应该是很方便的,但是不知道为什么全部用string来表示,用cin输入无限超时啊。后面改为字符数组了然后用scanf居然就过了,太坑爹。
代码如下:
#include <iostream> #include <cstdio> #include <queue> #include <cstring> using namespace std; #define maxn 155 #define INF 10000000 int w[maxn][maxn]; struct node { int u, key; friend bool operator<(node a, node b) { return a.key > b.key; } }; bool visited[maxn]; node d[maxn]; priority_queue<node> q; char stn[maxn][35]; int sno; void Dijkstra(int s) { for(int i = 0; i < sno; i++) { d[i].u = i; d[i].key = INF; visited[i] = false; } d[s].key = 0; q.push(d[s]); while(!q.empty()) { node nd = q.top(); q.pop(); int st = nd.u; if(visited[st] == true) continue; visited[st] = true; for(int j = 0; j < sno; j++) { if(j!=st && !visited[j] && w[st][j]+d[st].key < d[j].key) { d[j].key = w[st][j]+d[st].key; q.push(d[j]); } } } } int Find(char s[]) { for(int i = 0; i < sno; i++) if(strcmp(stn[i], s)==0) return i; return -1; } int main() { int n, c, x, y; char st[35], ed[35], a[35], b[35]; while(scanf("%d", &n), n!=-1) { for(int i = 0; i <= maxn; i++) for(int j = i; j <= maxn; j++) w[i][j] = w[j][i] = INF; scanf("%s%s", st, ed); strcpy(stn[0], st); strcpy(stn[1], ed); sno = 2; while(n--) { scanf("%s %s %d", a, b, &c); x = Find(a); if(x == -1) { x = sno; //stn[sno++] = a; strcpy(stn[sno++], a); } y = Find(b); if(y == -1) { y = sno; strcpy(stn[sno++], b); } if(w[x][y] > c) w[x][y] = w[y][x] = c; } if(strcmp(st, ed)==0) { printf("0\n"); continue; } Dijkstra(0); if(d[1].key < INF) printf("%d\n", d[1].key); else printf("-1\n"); } return 0; }
View Code
相关文章推荐
- HDU 2112— HDU Today,最短路径算法,Dijkstra
- HDU 2112 HDU Today 【最短路径 dijkstra & floyed & SPFA 】
- HDU:2112 HDU Today(floyd求最短路径+变形题)
- 【最短路径-Floyd】hdu 2112 HDU Today
- [最短路径] HDU 2112 - HDU Today
- hdu-1385 Minimum Transport Cost(Dijkstra最短路径算法)
- hdu 题目2122 HDU Today (最短路径,Dijkstra)
- hdu 1874 最短路径 dijkstra 和floyd 算法
- 【HDU 1874 2544 2066 2112】 Dijkstra单源最短路径专题 —— 优先队列+邻接表/邻接矩阵
- [HDU](2112)HDU Today ---单源最短路径(图)
- [贪心]Dijkstra最短路径算法
- dijkstra最短路径算法
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- Dijkstra 有向带权最短路径算法的简明阐释
- 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++)
- hdu 1874 最短路径dijkstra
- 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- 几个最短路径算法Floyd、Dijkstra、Bellman-Ford、SPFA的比较
- 最短路径算法-dijkstra