题意

在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(这道题隐藏着一个大坑)的更多相关文章

  1. POJ 3669 Meteor Shower【BFS】

    POJ 3669 去看流星雨,不料流星掉下来会砸毁上下左右中五个点.每个流星掉下的位置和时间都不同,求能否活命,如果能活命,最短的逃跑时间是多少? 思路:对流星雨排序,然后将地图的每个点的值设为该点最 ...

  2. POJ 3669 Meteor Shower(流星雨)

    POJ 3669 Meteor Shower(流星雨) Time Limit: 1000MS    Memory Limit: 65536K Description 题目描述 Bessie hears ...

  3. 点击一个div隐藏另一个div

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  4. 今天发现猎豹浏览器的一个大坑 Request.IsAuthenticated 一直为 false;另外附加原因以及临时的解决方法

    今天掉到了一个大坑里面,爬了1个多小时才发现不是代码的问题,居然是浏览器的问题… 下面是问题的发生过程 单点登陆  有2个站点  http://a.abc.com  http://b.abc.com ...

  5. ambari关于ranger的一个大坑----端口永远是3306,需要手动修改

    ambari关于ranger的一个大坑----端口永远是3306 这个坑是我在搭建ambari环境的时候发现的,我并没有找到原因,求助同事,然后一步步循着蛛丝马迹和试探,终于解决了,然而也揭露了amb ...

  6. 我靠!Semaphore里面居然有这么一个大坑!

    这是why的第 59 篇原创文章 荒腔走板 大家好,我是why哥 ,欢迎来到我连续周更优质原创文章的第 59 篇. 上周写了一篇文章,一不小心戳到了大家的爽点,其中一个转载我文章的大号,阅读量居然突破 ...

  7. 记阿里云 RDS MySQL 的一个大坑

    花了一个下午的时间,终于把一个阿里云 RDS MySQL 的一个大坑填上了,解决方法令人匪夷所思!绝对会让各位看官感到大吃一惊,阿里云 RDS MySQL 居然有这样 xx 的大坑! 问题 最近应业务 ...

  8. 连接数从异常到 300 到 5(RDS MySQL 的一个大坑•后记)

    在 <记 RDS MySQL 的一个大坑> 中,我提到遇到 User juxxxxxxxxxx already has more than 'max_user_connections' a ...

  9. BFS:Meteor Shower(POJ 3669)

         奔跑吧,傻牛 题目大意:这只Bessie的牛又要来闹事了,这次她的任务就是来躲流星雨,流星雨就是在一定时间会从天上砸到Bessie的所在的正方形区域内(Bessie在0,0的位置),然后砸下 ...

随机推荐

  1. 《奋斗吧!菜鸟》 第八次作业:Alpha冲刺 Scrum meeting 3

    项目 内容 这个作业属于哪个课程 任课教师链接 作业要求 https://www.cnblogs.com/nwnu-daizh/p/11012922.html 团队名称 奋斗吧!菜鸟 作业学习目标 A ...

  2. (35)Spring Boot集成Redis实现缓存机制【从零开始学Spring Boot】

    [本文章是否对你有用以及是否有好的建议,请留言] 本文章牵涉到的技术点比较多:Spring Data JPA.Redis.Spring MVC,Spirng Cache,所以在看这篇文章的时候,需要对 ...

  3. confluence中设置应用程序链接到jira

    有时需要在confluence中选中文本直接生成issue或story到jira里. 在"一般配置“->“应用程序链接”中创建即可.

  4. Redis命令操作简介及五种value数据类型

    转自:https://blog.csdn.net/ty4315/article/details/52050721 Redis是使用键值存储数据,key必须是字符串value支持五种数据类型,最新版本又 ...

  5. POJ 1679

    求一次最小成树,求一次小生成树,若相等,则不唯一.否则,唯一. #include <iostream> #include <cstdio> #include <cstri ...

  6. Dagger2使用攻略

    Dagger2使用攻略 Dagger 2 是 Square 的 Dagger 分支,是一种依赖注入框架.眼下由 Google 接手进行开发,Dagger2是使用代码自己主动生成和手写代码来实现依赖注入 ...

  7. BAT常问问题总结以及回答(数据库篇)

    数据库 事务四大特性(ACID)原子性.一致性.隔离性.持久性 事务:所谓事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位.begin transaction  原 ...

  8. Online Object Tracking: A Benchmark 论文笔记

    Factors that affect the performance of a tracing algorithm 1 Illumination variation 2 Occlusion 3 Ba ...

  9. Ubuntu安装及ubuntu系统使用菜岛教程

    Ubuntu是一款广受欢迎的开源Linux发行版,和其他Linux操作系统相比,Ubuntu非常易用,和Windows相容性很好,非常适合Windows用户的迁移,在其八年的成长过程中已经获得了两千多 ...

  10. setResult详解

    startActivityForResult与startActivity的不同之处在于:1.startActivity( ) 仅仅是跳转到目标页面,若是想跳回当前页面,则必须再使用一次startAct ...