poj 3669 bfs(这道题隐藏着一个大坑)
题意
在x,y坐标系,有流星会落下来,给出每颗流星落下来的坐标和时间,问你能否从(0,0)这个点到一个安全的位置。所谓的安全位置就是不会有流星落下的位置。
题解:
广搜,但是这里有一个深坑,就是搜索的时候判断坐标是否越界的时候,题中说0≤x≤300,0≤y≤300。也就是说如果 if(x>300||y>300||x<0||y<0) 就是越界,不用进队列。
注意,就是这个 x>300||y>300 越界条件有问题。不能是300,要比300大,哪怕301也行。
下面看我调试了5个小时的AC代码,才发现这个神坑...
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std; const int MAX=305; typedef struct node
{
node()
{
x=y=time=0;
}
int x,y;
int time;
}Node; int mmap[MAX][MAX]; //地图
int dx[4]={-1,1,0,0}; //方向控制
int dy[4]={0,0,-1,1};
int flag[MAX][MAX]; //标记位 queue<Node> q; void bfs()
{
memset(flag,0,sizeof(flag));
while(!q.empty()) q.pop(); Node s; //把原点入队
s.x=0;
s.y=0;
s.time=0;
q.push(s);
flag[0][0]=1; Node now;
while(!q.empty())
{
Node cur=q.front();
q.pop();
for(int i=0;i<4;i++)
{
int xx=cur.x+dx[i];
int yy=cur.y+dy[i];
if(xx<0||yy<0||xx>301||yy>301) //就是这里,妈的可坑了,题意明明说<=300,也就是说>300不行,他妈的非要>301才能过,那不就是<=301了?
continue;
now.x=xx;
now.y=yy;
now.time=cur.time+1;
if(mmap[now.x][now.y]==-1) //找到安全地点
{
cout<<now.time<<endl;
return;
}
if(flag[now.x][now.y]==0) //如果没有被走过
{
if(now.time<mmap[now.x][now.y]||mmap[now.x][now.y]==-1) //如果当前地点是安全地点或者还没有被流星炸毁
{
flag[now.x][now.y]=1;
q.push(now);
}
}
}
}
cout<<-1<<endl;
} int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
memset(mmap,-1,sizeof(mmap)); //地图初始化为-1
for(int i=0; i<n; i++) //输入地图信息
{
int x,y,t;
scanf("%d%d%d",&x,&y,&t);
if(mmap[x][y]!=-1) //但要注意的是如果当前流星的坠地时间大于以前的流星的坠地时间,要取最小值
mmap[x][y]=min(mmap[x][y],t);
else
mmap[x][y]=t;
for(int i=0;i<4;i++)
{
int xx=x+dx[i];
int yy=y+dy[i];
if(xx<0||yy<0||xx>301||yy>301) //还有这里也是
continue;
if(mmap[xx][yy]!=-1) //这个也是,要取最小坠地时间
mmap[xx][yy]=min(mmap[xx][yy],t);
else mmap[xx][yy]=t;
}
}
if(mmap[0][0]==0) //如果在原点就被炸
cout<<-1<<endl;
else
bfs();
}
}
poj 3669 bfs(这道题隐藏着一个大坑)的更多相关文章
- POJ 3669 Meteor Shower【BFS】
POJ 3669 去看流星雨,不料流星掉下来会砸毁上下左右中五个点.每个流星掉下的位置和时间都不同,求能否活命,如果能活命,最短的逃跑时间是多少? 思路:对流星雨排序,然后将地图的每个点的值设为该点最 ...
- POJ 3669 Meteor Shower(流星雨)
POJ 3669 Meteor Shower(流星雨) Time Limit: 1000MS Memory Limit: 65536K Description 题目描述 Bessie hears ...
- 点击一个div隐藏另一个div
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 今天发现猎豹浏览器的一个大坑 Request.IsAuthenticated 一直为 false;另外附加原因以及临时的解决方法
今天掉到了一个大坑里面,爬了1个多小时才发现不是代码的问题,居然是浏览器的问题… 下面是问题的发生过程 单点登陆 有2个站点 http://a.abc.com http://b.abc.com ...
- ambari关于ranger的一个大坑----端口永远是3306,需要手动修改
ambari关于ranger的一个大坑----端口永远是3306 这个坑是我在搭建ambari环境的时候发现的,我并没有找到原因,求助同事,然后一步步循着蛛丝马迹和试探,终于解决了,然而也揭露了amb ...
- 我靠!Semaphore里面居然有这么一个大坑!
这是why的第 59 篇原创文章 荒腔走板 大家好,我是why哥 ,欢迎来到我连续周更优质原创文章的第 59 篇. 上周写了一篇文章,一不小心戳到了大家的爽点,其中一个转载我文章的大号,阅读量居然突破 ...
- 记阿里云 RDS MySQL 的一个大坑
花了一个下午的时间,终于把一个阿里云 RDS MySQL 的一个大坑填上了,解决方法令人匪夷所思!绝对会让各位看官感到大吃一惊,阿里云 RDS MySQL 居然有这样 xx 的大坑! 问题 最近应业务 ...
- 连接数从异常到 300 到 5(RDS MySQL 的一个大坑•后记)
在 <记 RDS MySQL 的一个大坑> 中,我提到遇到 User juxxxxxxxxxx already has more than 'max_user_connections' a ...
- BFS:Meteor Shower(POJ 3669)
奔跑吧,傻牛 题目大意:这只Bessie的牛又要来闹事了,这次她的任务就是来躲流星雨,流星雨就是在一定时间会从天上砸到Bessie的所在的正方形区域内(Bessie在0,0的位置),然后砸下 ...
随机推荐
- mysql中的高级查询语句
此随笔用到的数据全是来自 关于mysql中表关系的一些理解(一对一,一对多,多对多) 提及的 学院表,学生表,学生详情表,选课表,课程表 单标查询:(查看学生表的学生名单) select st ...
- Spring Cloud-hystrix(六)
作用 防止 多个服务相互交互时某个服务运行缓慢导致调用方线程挂起,高并发情况下 导致挂起线太多 引起调用方的服务不可用 能够在服务发生故障或者通过断路器监控向调用方返回一个错误 而不是长时间的等待 S ...
- Atomic operations on the x86 processors
On the Intel type of x86 processors including AMD, increasingly there are more CPU cores or processo ...
- Mongodb--切片
1.在3台服务器上分别运行 2717 , 27018,27109,互为副本集,形成3套replSet 2.在3台服务器上各配置config.server,运行在27020端口上,和配置mongod的命 ...
- PHP扩展开发-测验成功
原文:http://kimi.it/496.html http://blog.csdn.net/u011957758/article/details/72234075 ---------------- ...
- pl/sql developer br 文件
pl/sql developer br 文件 Version=1 RightMargin=72 Indent=2 UseTabCharacter=FALSE TabCharacterSize=2 Al ...
- 在windows下怎样更新vundle?
本文出自Svitter的blog 更新Vundle的时候.不管是输出BundleInstall.还是PluginInstall! 都会调用系统的git,所以必须安装git才干达到目的更新插件. git ...
- jquery非文本框复制
function selectText(x) { if (document.selection) { var range = document.body.createTextRange();//ie ...
- 《Java程序设计》第16周周五:数据库连接 与 随机数的使用
第一部分:实验项目 项目二:数据库初步. 目的:了解Java连接数据库的步骤与方法.以及MySQL数据库的安装与使用. 目标: (1)在机房安装上MySQL数据库. 安装成功 MySQL数据库 (2) ...
- luogu1120 小木棍【数据加强版】 暴力剪枝
题目大意 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50.现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度.给出每段小木棍的长度,编程帮 ...