广搜最短路(最短时间到达目的地),POJ(3669)
题目链接:http://poj.org/problem?id=3669
解题报告:
1、流星坠落的点,四周和自己本身都被毁灭,不断更新每个点被毁灭的时候的最短时间。
2、搜索终点是,到达某个点,这个不会有流星毁灭他,即他的毁灭的时间大于最后一个流星到达时的时间。
#include <stdio.h>
#include <memory.h>
#include <queue>
using namespace std; #define MAX 302 ///地图宽度 int m; ///流星数
int map[MAX][MAX]; ///地图
bool visited[MAX][MAX]; ///是否访问过
int last; ///最晚的流星时间 int go[][] ={{,},{-,},{,},{,-},{,}}; ///五个方向 struct Meteor
{
int x;
int y;
int t;
}meteor[]; ///流星结构 typedef Meteor Node; ///节点结构,用于bfs int max(int a, int b)
{
return a > b ? a : b;
} int bfs()
{
memset(visited, false, sizeof(visited)); queue<Node> q; ///队列 Node fir; ///起始点入队
fir.x = fir.y = fir.t = ;
visited[][] = true; q.push(fir); while (!q.empty()) ///bfs
{
Node now = q.front();
q.pop(); for (int i = ; i < ; i++) ///每次必须行动1格
{
Node tmp = now;
tmp.x += go[i][];
tmp.y += go[i][];
tmp.t++; if (tmp.x >= && tmp.y >= && map[tmp.x][tmp.y]>tmp.t && !visited[tmp.x][tmp.y]) ///没越界、流星还未砸这个格子、还没访问过(重复访问就是不是bfs最优解了)
{
visited[tmp.x][tmp.y] = true; ///标记
if (map[tmp.x][tmp.y] > last) ///如果格子不会被砸到
{
return tmp.t;
}
q.push(tmp);
}
}
}
return -;
} int main()
{
while (scanf("%d", &m) != EOF)
{
for (int i = ; i < m; i++)
{
scanf("%d%d%d", &meteor[i].x, &meteor[i].y, &meteor[i].t);
} memset(map, 0x7f, sizeof(map)); ///要严谨一点可以用0x7fffffff,不过就不能用memset了
for (int i = ; i < m; i++)
{
///计算最晚流星的时间
if (i == )
last = meteor[i].t;
else
last = max(last, meteor[i].t); ///更新地图上某个点的最快的流星下落时间
for (int j = ; j < ; j++)
{
int tx = meteor[i].x + go[j][];
int ty = meteor[i].y + go[j][]; if (tx >= && ty >= && map[tx][ty]>meteor[i].t)
{
map[tx][ty] = meteor[i].t;
}
}
} if (map[][] == ) ///起始点被砸直接gg
printf("-1\n");
else ///否则bfs
printf("%d\n", bfs());
}
return ;
}
广搜最短路(最短时间到达目的地),POJ(3669)的更多相关文章
- poj 3278 Catch That Cow (广搜,简单)
题目 以前做过,所以现在觉得很简单,需要剪枝,注意广搜的特性: 另外题目中,当人在牛的前方时,人只能后退. #define _CRT_SECURE_NO_WARNINGS //这是非一般的最短路,所以 ...
- hdu 1195 Open the Lock(广搜,简单)
题目 猜密码,问最少操作多少次猜对,思路很简单的广搜,各种可能一个个列出来就可以了,可惜我写的很搓. 不过还是很开心,今天第一个一次过了的代码 #define _CRT_SECURE_NO_WARNI ...
- hdu 1175 连连看 (广搜,注意解题思维,简单)
题目 解析见代码 #define _CRT_SECURE_NO_WARNINGS //这是非一般的最短路,所以广搜到的最短的路不一定是所要的路线 //所以应该把所有的路径都搜索出来,找到最短的转折数, ...
- 动态规划之DP中判断是否到达某一状态(最短时间是什么)?
codevs1684 垃圾陷阱 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 卡门——农夫约翰极其珍视的一条Holste ...
- luoguP4112 [HEOI2015]最短不公共子串 SAM,序列自动机,广搜BFS
luoguP4112 [HEOI2015]最短不公共子串 链接 luogu loj 思路 子串可以用后缀自动机,子序列可以用序列自动机. 序列自动机是啥,就是能访问到所有子序列的自动机. 每个点记录下 ...
- PIGS POJ - 1149网络流(最短增广路---广搜) + 建图
题意: 第一行输入m和n,m是猪圈的数量,n是顾客的数量,下面n行 第 i+1行表示第i个顾客 , 输入第一个数字表示有几把猪圈的钥匙,后面输入对应的猪圈,最后一个数字输入顾客想买几头猪. 建图: 设 ...
- Secret Milking Machine POJ - 2455 网络流(Dinic算法---广搜判断+深搜增广)+时间优化+二分
题意: 第一行输入N M C ,表示从1到N有M条无向边,现在要从1走到N 走C次完全不同的路径,求最长边的最小值.下面M行是从a点到b点的距离. 建图: 题上说从两点之间可以有多条边,问的是从1~N ...
- hdu 1026:Ignatius and the Princess I(优先队列 + bfs广搜。ps:广搜AC,深搜超时,求助攻!)
Ignatius and the Princess I Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (J ...
- hdu 1180:诡异的楼梯(BFS广搜)
诡异的楼梯 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Subm ...
随机推荐
- Django易混淆问题
1.Django本身提供了runserver 为什么不能用来 部署 runserver 方法是调试 Django 时经常用到的运行方式,它使用 Django 自带的 WSGI Server 运行,主 ...
- 21-----BBS论坛
BBS论坛(二十一) 21.1.编辑轮播图功能完成 (1)cms_banners.html 把属性绑定到<tr>上面,方便找到各属性的值 <tbody> {% for bann ...
- Nginx 为什么要延迟关闭
防止 Nginx处理完后调用close关闭连接后 ,若缓冲区任然接收到客户端发来的内容 ,则服务器会向客户端发送RST包关闭连接,导致客户端由于收到了RST而忽略了 http response ...
- inventor安装失败怎样卸载安装inventor 2017?
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- CAD安装失败怎样卸载CAD 2012?错误提示某些产品无法安装
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- maya2017安装失败如何卸载重装
AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...
- Oracle SQL Tuning Advisor 测试
如果面对一个需要优化的SQL语句,没有很好的想法,可以先试试Oracle的SQL Tuning Advisor. SQL> select * from v$version; BANNER --- ...
- Murano Weekly Meeting 2016.06.28
Meeting time: 2016.June.28 1:00~2:00 Chairperson: Kirill Zaitsev, from Mirantis Meeting summary: 1. ...
- Linux小工具:文件上传ftp服务器
工作期间,每次将文件上传至ftp服务器时,均需要手工输入ip.用户名.密码等,因此,考虑编写脚本完成文件的上传任务.具体的脚本sync.sh如下: #!/bin/bash source ~/.bash ...
- java学习第十三天
1:StringBuffer(掌握) (1)用字符串做拼接,比较耗时并且也耗内存,而这种拼接操作又是比较常见的,为了解决这个问题,Java就提供了 一个字符串缓冲区类.StringBuffer供我们使 ...