View Code
 1 #include<stdio.h>
2 #include<string.h>
3 #include<stdlib.h>
4 #define MAX 0xfffffff
5 int map[200][200], visit[200];
6 long dis[200];
7 int N, m, s, e;
8 char name[200][40];
9
10 int find(char str[32])
11 {
12 int i;
13 for( i = 1; i <= m; ++i )
14 {
15 if(strcmp(name[i], str) == 0)
16 return i;
17 }
18 if( m == 0 || i > m )
19 {
20 ++m;
21 strcpy(name[m], str);
22 return m;
23 }
24 }
25
26 void dijkstra( int s, int e )
27 {
28 int i, j, rec;
29 for(i = 1; i <= m; ++i)
30 {
31 dis[i] = map[s][i];
32 visit[i] = i == s ? 1 : 0;
33 }
34 for(i = 1; i <= m - 1; ++i)
35 {
36 rec = 0;
37 dis[rec] = MAX;
38 for(j = 1; j <= m; ++j)
39 if(!visit[j] && dis[j] < dis[rec])
40 rec = j;
41 visit[rec] = 1;
42 for(j = 1; j <= m; ++j)
43 if(map[rec][j] < MAX && !visit[j] && map[rec][j] + dis[rec] < dis[j])
44 dis[j] = map[rec][j] + dis[rec];
45 }
46 }
47
48 int main()
49 {
50
51 int i, j, a, b, c;
52 char s1[40], s2[40], start[40], end[40];
53 scanf("%d", &N);
54 while(N != -1)
55 {
56 m = 0;
57 for(i = 1; i <= 140; ++i)
58 {
59 for(j = 1; j <= 140; ++j)
60 map[i][j] = MAX;
61 }
62 scanf("%s %s", start, end);
63 for(i = 1; i <= N; ++i)
64 {
65 scanf("%s %s %d", s1, s2, &c);
66 a = find(s1);
67 b = find(s2);
68 if(map[a][b] > c)
69 {
70 map[a][b] = c;
71 map[b][a] = c;
72 }
73 }
74 s = find(start);
75 e = find(end);
76 if(s == e)
77 printf("0\n");
78 else{
79 dijkstra(s, e);
80 if(dis[e] != MAX )
81 printf("%ld\n", dis[e]);
82 else
83 printf("-1\n");
84 }
85 scanf("%d", &N);
86 }
87 return 0;
88 }

 

Description

经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强。这时候,XHD夫妇也退居了二线,并在风景秀美的诸暨市�浦镇陶姚村买了个房子,开始安度晚年了。 这样住了一段时间,徐总对当地的交通还是不太了解。有时很郁闷,想去一个地方又不知道应该乘什么公交车,在什么地方转车,在什么地方下车(其实徐总自己有车,却一定要与民同乐,这就是徐总的性格)。 徐总经常会问蹩脚的英文问路:“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,表示输入结束。
 

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 虽然偶尔会迷路,但是因为有了你的帮助 **和**从此还是过上了幸福的生活。 ��全剧终��
 
 
 
posted on 2012-03-18 19:56  狸の舞  阅读(186)  评论(0编辑  收藏  举报