hdu2066-一个人的旅行(迪杰斯特拉求最短路)

来源:互联网 发布:开源企业软件 编辑:程序博客网 时间:2024/06/05 19:54

一个人的旅行

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


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 31 3 51 4 72 8 123 8 44 9 129 10 21 28 9 10
 

Sample Output

9

//hdu2066-一个人的旅行(迪杰斯特拉求最短路) //题目大意://给你 T条路,S个起点,D个终点;求从这些起点出发到终点中所用的最短时间;//解题思路://本题的主要思想是用迪杰斯特拉求最短的路,只是此题的源点和终点都不止一个,这只需定义一个变量min,将从每个顶点//出发到相应终点的最短路赋给它既可,另外需要注意的是当起点和终点相同的情况(时间为零)和两点之间是否有重边//最后就是输入的图中的顶点数 n的求法(因为这忙活了半天),即顶点编号中最大的编号即是 顶点的个数。 #include<stdio.h>#include<string.h>#define INF 0xffffffint map[1010][1010],vis[1010],dis[1010];int stat[1010],end[1010];int S,T,D,a,b,time,tim;int mintu(int x,int y){if(x>y) return y;return x;}int maxtu(int x,int y){if(x>y) return x;return y;}void dijkstra(int s,int n){int i,j,u,v;for(i=1;i<=n;i++){dis[i]=INF;vis[i]=0;}dis[s]=0;while(1){   v=-1;   for(u=1;u<=n;u++){   if(!vis[u]&&(v==-1||dis[u]<dis[v]))     v=u;   }   if(v==-1)    break;    vis[v]=1;   for(u=1;u<=n;u++){    dis[u]=mintu(dis[u],dis[v]+map[v][u]);   }}}int main(){int i,j,k,n;while(scanf("%d%d%d",&T,&S,&D)!=EOF){n=0;memset(vis,0,sizeof(vis));memset(dis,0,sizeof(dis));for(i=1;i<=1000;i++)  for(j=1;j<=1000;j++)  {  if(i==j)    map[i][j]=map[j][i]=0;     //对起点和终点相同的,将其时间赋为零;   else    map[i][j]=INF;            //不同的赋为一个大数INF;   }for(i=1;i<=T;i++){scanf("%d%d%d",&a,&b,&time);if(maxtu(a,b)>n)                //求图中的点中最大的编号即图中城市的个数 n;   n=maxtu(a,b);if(map[a][b]>time)             //判断是否有重边,若有,去该路径上路径最短的那条;  map[a][b]=map[b][a]=time;}for(i=1;i<=S;i++) scanf("%d",&stat[i]);for(j=1;j<=D;j++) scanf("%d",&end[j]);tim=INF;for(i=1;i<=S;i++){                   //双重for循环遍历求能到达的终点中用时最短的时间; dijkstra(stat[i],n);for(j=1;j<=D;j++){if(tim>dis[end[j]])  tim=dis[end[j]];}}printf("%d\n",tim);}return 0;}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝被恶意退款怎么办 天猫红包失效怎么办 预约人数满了怎么办 淘宝签证拒签怎么办 天猫美的差评怎么办 直通车欠费三块怎么办 上海个人户口卡怎么办 网购信息泄露怎么办 单张券达到上限怎么办 未成年偷钱充q币怎么办 被香港中炎骗了怎么办 房东要收回店面怎么办 天猫字迹模糊怎么办 淘宝类目不叫上架怎么办 淘宝直播有延迟怎么办 淘宝直播间中奖怎么办 微信扫码付款后卖家不发货怎么办 淘宝打骚扰电话怎么办 淘宝卖家打骚扰电话怎么办 被商家打了怎么办 保底消费入坑怎么办 留党查看到期怎么办 遭遇淘宝控价怎么办 淘宝店没有了怎么办 淘宝店铺运费险不出单怎么办 闲鱼定金被骗怎么办 肯德基团购过期怎么办 word不可以修改怎么办 店铺预售不发货怎么办 埋件设置不符合怎么办 闲鱼付了款卖家不发货怎么办 微信里付了款卖家不发货怎么办 运动鞋穿臭了怎么办 小车陷泥土了怎么办 孩子有心事不说怎么办 网状运动鞋乱了怎么办 运动鞋布面坏了怎么办 运动鞋面破了怎么办 脚磨烂了怎么办小妙招 网眼运动鞋破了怎么办 运动鞋后面烂了怎么办