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的位置),然后砸下 ...
随机推荐
- 使用SQLAlchemy对博客文章进行分页
https://blog.csdn.net/hyman_c/article/details/54382161
- Mysql学习总结(38)——21条MySql性能优化经验
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情. 当我们去设计数据库表结构,对操作数 ...
- POJ 2002 Squares【值得摸索的一道二分+点旋转】
id=2002">Squares 很好的一道二分,事实上本来我是没有思路的,看了基神的题解之后才似乎明确了点. 题意:给出最多有1000个点,问这些点能够组成多少个正方形 分析:先想想 ...
- POJ 1984
我做过的最棘手的一道题了,不是因为难,难就是不懂,而是因为明明思路对了,却调了很久程序没发现自己哪错了.....就连样例都不过 操,别人的代码::::::::::::::::::::::::::::. ...
- 【跟我一起学Unity3D】做一个2D的90坦克大战之AI系统
对于AI,我的初始想法非常easy,首先他要能动,而且是在地图里面动. 懂得撞墙后转弯,然后懂得射击,其它的没有了,基于这个想法,我首先创建了一个MyTank类,用于管理玩家的坦克的活动,然后创建AI ...
- JPA相关注解
JPA注解 一.基本注解 1.表相关 @Entity 仅仅要加了这个注解就具备了表和实体的映射关系,表名就是实体名 @Table(name="表名") 一般和实体 ...
- Android更新带进度条的通知栏
在网上查询了下.Android版本号更新通知栏带进度条,醉了,基本都是复制过来.有的代码不全,连源代码下载都没有.有下载也须要积分,还不能用,真黑心啊!!之前自己也写过自己定义通知栏Notificat ...
- 轻快的vim(一):移动
断断续续的使用VIM也一年了,会的始终都是那么几个命令,效率极低 前几个星期把Windows换成了Linux Mint,基本上也稳定了下来 就今晚,我已经下定决心开始新的VIM之旅,顺便写一系列的笔记 ...
- [SPOJ 30669] Ada and Trip
[题目链接] https://www.spoj.com/problems/ADATRIP/ [算法] 直接使用dijkstra堆优化算法即可 [代码] #include<bits/stdc++. ...
- 网络:万维网(WWW)
ylbtech-网络:万维网(WWW) www (万维网缩写)同义词 万维网一般指www(万维网缩写)WWW是环球信息网的缩写,(亦作“Web”.“WWW”.“'W3'”,英文全称为“World Wi ...