HDU 2066 一个人的旅行 (最短路----floyd && dijkstra)
来源:互联网 发布:pdf压缩软件 for mac 编辑:程序博客网 时间:2024/05/16 02:28
一个人的旅行
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 27548 Accepted Submission(s): 9556
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个数,表示草儿想去地方。
接着有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
Author
Grass
Source
RPG专场练习赛
多源求最短路径,这里重新定义了两个数组,用来表示起点和 终点,如果是起点和终点,数组值为1;
floyd
#include<stdio.h>#include<string.h>#define INF 0xfffffffint map[1010][1010];int x[1010],y[1010];int main(){int t,s,k,d,m,n;while(scanf("%d%d%d",&t,&s,&d)!=EOF){memset(x,0,sizeof(x));memset(y,0,sizeof(y));int i,j,a,b,c,min,max=0;for(i=1;i<=1000;i++)for(j=1;j<=1000;j++)map[i][j]=INF;for(i=1;i<=t;i++){scanf("%d%d%d",&a,&b,&c);if(max<a)max=a;if(max<b)max=b;if(c<map[a][b])map[a][b]=map[b][a]=c;}for(i=1;i<=s;i++){scanf("%d",&m);x[m]=1;}for(i=1;i<=d;i++){scanf("%d",&n);y[n]=1;}min=INF;for(k=1;k<=max;k++)for(i=1;i<=max;i++)if(map[i][k]!=INF){for(j=1;j<=max;j++) {if(i==j)continue;if(map[i][j]>map[i][k]+map[k][j])map[i][j]=map[i][k]+map[k][j];if(x[i]&&y[j]&&min>map[i][j])min=map[i][j]; }}printf("%d\n",min);} }
<span style="font-size:24px;"><strong>dijkstra</strong></span>
#include<stdio.h>#include<string.h>#include<algorithm>#define INF 0xfffffffusing namespace std;int map[1010][1010],dis[1010],vis[1010];int n;void dijk(int v){int i,j,k,Min;memset(vis,0,sizeof(vis));for(i=1;i<=1000;i++)dis[i]=map[v][i];dis[v]=0;vis[v]=1;for(i=1;i<=1000;i++){Min=INF;for(j=1;j<=1000;j++){if(!vis[j]&&Min>dis[j]){Min=dis[j];k=j;}}vis[k]=1;for(j=1;j<=1000;j++){if(!vis[j]&&dis[j]>dis[k]+map[k][j])dis[j]=dis[k]+map[k][j];}}}int main(){int s,t,d,a,b,c,i,j,begin[1010],end[1010];while(scanf("%d%d%d",&t,&s,&d)!=EOF){for(i=1;i<=1000;i++)for(j=1;j<=1000;j++){map[i][j]=INF;if(i==j)map[i][j]=0;}while(t--){scanf("%d%d%d",&a,&b,&c);if(map[a][b]>c)map[a][b]=map[b][a]=c;}for(i=0;i<s;i++)scanf("%d",&begin[i]);for(i=0;i<d;i++)scanf("%d",&end[i]);int ans=INF;for(i=0;i<s;i++){dijk(begin[i]);for(j=0;j<d;j++) { ans=min(ans,dis[end[j]]); }}printf("%d\n",ans);}return 0;}
1 0
- HDU 2066 一个人的旅行 (最短路----floyd && dijkstra)
- HDU-2066 一个人的旅行(图论,Floyd ,最短路)
- HDU-2066 一个人的旅行(最短路[Floyd])
- 【hdu 2066】 一个人的旅行 ( 最短路 Dijkstra)
- HDU 2066-一个人的旅行(最短路Dijkstra)
- HDU 2066 一个人的旅行(最短路dijkstra)
- HDU 2066 一个人的旅行 (最短路--Dijkstra算法)
- HDU 2066-一个人的旅行(Floyd任意两点最短路)
- hdu 2066 一个人的旅行(Dijkstra求最短路问题)
- HDU 2066 一个人的旅行(最短路&Dijkstra)
- hdu 2066 一个人的旅行(Dijkstra求最短路)
- HDU 2066 一个人的旅行【最短路 dijkstra & floyed & SPFA 】
- hdu 2066 一个人的旅行 最短路 dijkstra 解题报告
- HDU-2066-一个人的旅行(最短路,dijkstra)
- HDU 2066 一个人的旅行【最短路dijkstra】
- HDU-#2066 一个人的旅行(Floyd & Dijkstra)
- HDOJ 2066 一个人的旅行 (最短路 Dijkstra && SPFA)
- HDOJ 2066 一个人的旅行(最短路--dijkstra)
- Linux服务器权限管理实践——添加用户只访问某些文件目录
- nRF905 无线发射模块
- LeetCode Maximum Depth of Binary Tree
- https原理:证书传递、验证和数据加密、解密过程解析
- [Leetcode]188. Best Time to Buy and Sell Stock IV@python
- HDU 2066 一个人的旅行 (最短路----floyd && dijkstra)
- Android开发学习之路--UI之基本布局
- 【Java】java使用反射访问对象方法和成员变量
- 应用层数据库读写分离db-loadbalance
- Codeforces 542F 构造
- 第7讲项目1——正差值
- hdu 1551 Cable master
- MVC中单独配置Log4Net
- 共模电感