码迷,mamicode.com
首页 > 其他好文 > 详细

一个人的旅行(floyd)

时间:2015-07-23 19:13:32      阅读:113      评论:0      收藏:0      [点我收藏+]

标签:

一个人的旅行

Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 23416    Accepted Submission(s): 8154


Problem Description
虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个假,可是也不能荒废了训练啊,所以草儿决定在要在最短的时间去一个自己想去的地方!因为草儿的家在一个小镇上,没有火车经过,所以她只能去邻近的城市坐火车(好可怜啊~)。
 

 

Input
输入数据有多组,每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有S个,草儿想去的地方有D个;
接着有T行,每行有三个整数a,b,time,表示a,b城市之间的车程是time小时;(1=<(a,b)<=1000;a,b 之间可能有多条路)
接着的第T+1行有S个数,表示和草儿家相连的城市;
接着的第T+2行有D个数,表示草儿想去地方。
 

 

Output
输出草儿能去某个喜欢的城市的最短时间。
 

 

Sample Input
6 2 3 1 3 5 1 4 7 2 8 12 3 8 4 4 9 12 9 10 2 1 2 8 9 10
 

 

Sample Output
9
题解:用了floyd但是超时,不知道怎么改。。。。。贴着求大神讲解
代码:
 1 #include<stdio.h>
 2 #define INF 0xffff
 3 #define MIN(x,y) x<y?x:y
 4 #define MAX(x,y) x>y?x:y
 5 typedef struct{
 6     int begin,end,time;
 7 }node;
 8 int city[1001][1001],start[10010],final[10010];
 9 node deta[10010];
10 int main(){//printf("%d\n",INF);
11     int T,S,D,min,max,t;
12     while(~scanf("%d%d%d",&T,&S,&D)){
13         for(int i=1;i<=1000;++i){
14             for(int j=1;j<=1000;++j){
15                  city[i][j]=city[j][i]=INF;
16             }
17         }
18         for(int i=0;i<T;++i){
19             scanf("%d%d%d",&deta[i].begin,&deta[i].end,&deta[i].time);
20             city[deta[i].end][deta[i].begin]=city[deta[i].begin][deta[i].end]=deta[i].time;
21             if(!i)min=MIN(deta[i].begin,deta[i].end),max=MAX(deta[i].begin,deta[i].end);
22             else min=MIN(min,deta[i].begin),min=MIN(min,deta[i].end),max=MAX(max,deta[i].begin),max=MAX(max,deta[i].end);
23         }
24         for(int i=0;i<S;++i){
25             scanf("%d",&start[i]);
26         }
27         for(int i=0;i<D;++i)scanf("%d",&final[i]);
28         for(int i=min;i<=max;++i){
29             for(int j=min;j<=max;++j){
30                 for(int k=min;k<=max;++k){
31                     city[j][k]=city[j][i]+city[i][k]<city[j][k]?city[j][i]+city[i][k]:city[j][k];
32                 }
33             }
34         }
35         for(int i=0;i<S;++i){
36             for(int j=0;j<D;++j){
37             if(!i&&!j)t=city[start[i]][final[j]];
38             t=MIN(t,city[start[i]][final[j]]);    
39             }
40         }
41         printf("%d\n",t);
42     }
43     return 0;
44 } 

 

一个人的旅行(floyd)

标签:

原文地址:http://www.cnblogs.com/handsomecui/p/4671095.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!