HDU-2066-一个人的旅行 【Dijkstra】
<题目链接>
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
解题分析:
解决此题有两种思路。
第一种:将草儿的家看做标号为0的点,然后这个点到与它相邻城市的距离为0,然后做一次dijsktra,就可得到标号为0的点到所有点的最短距离;
第二种:将于草儿家相邻的所有城市看成不同的起点,然后对这些所有的起点都跑一遍dijkstra。 下面的是第一种的代码:
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std; #define INF 0x3f3f3f3f
const int maxn = + ;
int n, m, d;
int map[maxn + ][maxn + ];
int vis[maxn], maxnode;
int goal[maxn + ], node[maxn + ];
int dis[maxn + ]; void dij()
{
memset(vis, , sizeof(vis));
memset(dis, INF, sizeof(dis));
dis[] = ;
int cur = ; //初始起点为草儿自己家
for (int i = ; i <= maxnode; i++) {
if (node[i]) {
vis[cur] = ;
for (int j = ; j <= maxnode; j++) {
if (node[j] && vis[j] == )
dis[j] = min(dis[j], map[cur][j] + dis[cur]);
} int maxn = INF, x = ;
for (int j = ; j <= maxnode; j++)
{
if (node[j] && dis[j] <= maxn && !vis[j])
{
maxn = dis[j];
x = j;
}
} cur = x;
}
} int dist = INF;
for (int i = ; i <= d; i++)
{
if (dist>dis[goal[i]])
dist = dis[goal[i]];
}
printf("%d\n", dist);
} int main()
{
while (scanf("%d%d%d", &n, &m, &d) != EOF)
{
memset(node, , sizeof(node)); //node数组记录下本题中出现过的点
maxnode = -INF; //maxnode记录下输入中,标号最大的点,为循环找到边界
memset(map, INF, sizeof(map));
for (int i = ; i <= n; i++)
{
int a, b, c;
scanf("%d%d%d", &a, &b, &c);
if (c<map[a][b]) { //如果两个点之间有多条路,选择最短的那一条
map[a][b] = map[b][a] = c;
if (a>maxnode)maxnode = a;
if (b>maxnode)maxnode = b;
}
node[a] = , node[b] = ;
}
for (int i = ; i <= m; i++) {
int cal; scanf("%d", &cal);
node[cal] = ;
map[][cal] = map[cal][] = ; //草儿家到与她家相邻城市的距离置为0
} for (int i = ; i <= d; i++) {
scanf("%d", &goal[i]); //目标城市
node[goal[i]] = ;
}
dij();
}
return ;
}
2018-08-13
HDU-2066-一个人的旅行 【Dijkstra】的更多相关文章
- hdu 2066 一个人的旅行 Dijkstra
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066 题意分析:以草儿家为原点,给出城市间相互抵达的时间,给出草儿想去的城市,求最短时间.典型的单源最 ...
- HDU 2066 一个人的旅行 (Dijkstra算法)
一个人的旅行 Time Limit : 1000/1000ms (Java/Other) Memory Limit : 32768/32768K (Java/Other) Total Submis ...
- hdu 2066 一个人的旅行
题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=2066 一个人的旅行 Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷 ...
- HDU 2066 一个人的旅行(dijkstra水题+判重边)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066 题目大意:输入数据有多组,每组的第一行是三个整数T,S和D,表示有T条路,和草儿家相邻的城市的有 ...
- hdu 2066 一个人的旅行(dijkstra)
一个人的旅行 Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU 2066 一个人的旅行【Dijkstra 】
题意:给出s个起点,d个终点,问从这些起点到达终点的最短距离 因为有多个起点,所以把这多个起点的值设为0 哎= =改了好久的说= = 是因为在代码里面的t,不知道为什么调用dijkstra()函数之后 ...
- hdu 2066 一个人的旅行 解题报告
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2066 题目意思:给出T条路,和草儿家相邻的城市编号,以及草儿想去的地方的编号.问从草儿家到达草儿想去的 ...
- hdu - 2066 一个人的旅行(基础最短路)
http://acm.hdu.edu.cn/showproblem.php?pid=2066 把与草儿相连的城市最短距离置为0,然后进行dijkstra,在t个城市里找出距离最近的一个即可. #inc ...
- HDU 2066 一个人的旅行 - from lanshui_Yang
Problem Description 虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,^0^),很多事,还能丰 ...
- hdu 2066 一个人的旅行(最短路问题)
最短路································· 类似的问题还有好多不会!慢慢学吧!!!!. 进步,哪怕每天一点也行! (恋爱不是小事,确实小事的积累!(听着酷狗音乐台说的,很 ...
随机推荐
- mysql案例-sysbench安装测试
一 地址 githup地址https://github.com/akopytov/sysbench二 版本 sysbench 1.0.15 curl -s https://packagecloud.i ...
- Android数据存储五种方式
1 使用SharedPreferences存储数据:常用于做本地缓存 2 文件存储数据:(1)data/data/<package name>/files目录内 (2)SDCard内 ...
- Web下文件上传下载的路径问题
工程结构
- 基于XML搭建Dubbo项目
(1).新建一个普通Maven项目,用于存放一些公共服务接口及公共的Bean等. 公共Bean: package cn.coreqi.entities; import java.io.Serializ ...
- WGAN源码解读
WassersteinGAN源码 作者的代码包括两部分:models包下包含dcgan.py和mlp.py, 这两个py文件是两种不同的网络结构,在dcgan.py中判别器和生成器都含有卷积网络,而m ...
- JavaScript——封装
封装:使用对象封装的好处是可以减少全局变量污染的机会,讲属性,函数都隶属一个对象. 封装前: <script> var name="foo"; //name是全局的,被 ...
- ajax模拟获取json
现在工作中我用到获取数据的方式,基本都是ajax.前台获取后端的数据后,需要进行处理,然后把他们放进页面中的相应标签里.下面举一个简单的例子,来模拟数据的获取和摆放. 这里用ng框架获取数据然后处理, ...
- centos6.7安装系统后看不到网卡无法配置IP的解决办法
新安装centos6.7后发现/etc/sysconfig/network-scripts目录下没有eth0的网卡配置,通过ifconfig可以看到eth0的硬件地址 于是新建网卡输入一下内容 # c ...
- Maven编译时,出现找不到符号
解决办法: 如果使用的是聚合工程 1.执行project--clean(eclipse)或者build project(intellij),将项目清理一下. 2.执行聚合工程中的 Maven--cl ...
- 浅谈C语言内存管理、内存泄露、堆栈
1.内存分配区间: 对于一个C语言程序而言,内存空间主要由五个部分组成:代码段(.text).数据段(.data).静态区(.BSS).堆和栈组成. BSS段:BSS段 ...