题目:

Bessie听说有场史无前例的流星雨即将来临;有谶言:陨星将落,徒留灰烬。为保生机,她誓将找寻安全之所(永避星坠之地)。目前她正在平面坐标系的原点放牧,打算在群星断其生路前转移至安全地点。

此次共有M (1 ≤ M ≤ 50,000)颗流星来袭,流星i将在时间点Ti (0 ≤ Ti ≤ 1,000) 袭击点 (Xi, Yi) (0 ≤ Xi ≤ 300; 0 ≤ Yi ≤ 300)。每颗流星都将摧毁落点及其相邻四点的区域。

Bessie在0时刻时处于原点,且只能行于第一象限,以平行与坐标轴每秒一个单位长度的速度奔走于未被毁坏的相邻(通常为4)点上。在某点被摧毁的刹那及其往后的时刻,她都无法进入该点。

寻找Bessie到达安全地点所需的最短时间。

Input - 输入
* 第1行: 一个整数: M
* 第2..M+1行: 第i+1行包含由空格分隔的三个整数: Xi, Yi, and Ti
Output - 输出
* 仅一行: Bessie寻得安全点所花费的最短时间,无解则为-1。

Sample Input - 输入样例
4
0 0 2
2 1 2
1 1 2
0 3 5
Sample Output - 输出样例
5

分析与解答:

这里没有给出图,而是通过一些数据让你先建一个图,map[i][j]存的是这个点的爆炸时间,我们初始化最大时间,然后输入数据是把这个数以及他上下左右四个方位全部的时间填上,这里可能会重复爆,我们写最早爆的时间,也就是最小的时间。
然后我们从(0,0)开始搜,bfs中先把(0,0)放入队列,然后只要队列不为空,就继续搜,先取出队首元素。由于如果某个点被炸掉,他就不可能停在该点,最终她停的点一定是没有被炸的那个点,也就是说如果队首元素的map值是我们一开始赋的值maxn,那我们就可以返回这个点的时间了。如果没返回,就继续上下左右遍历,更改点的坐标以及时间,如果这个点没出现过,而且他在第一象限,而且此时此刻的时间小于map里开始爆的时间,那就说明可以走这个点,就把这个点push到队列里,并做上标记

这个代码稍微改一点就wa,一次时main里那个t,不能写成map[i][j],还有一个是bfs里面参数的位置,稍微一改就错,具体错到哪我调试了两小时没调出来md以后干脆先建结点再判断吧,参数再for里for外if里if外这东西我头疼
代码参考:
https://blog.csdn.net/coraline_m/article/details/18035393

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int maxn=10000;
int dir[4][2]={{-1,0},{1,0},{0,1},{0,-1}};
int mp[305][305];
int visi[305][305];
struct node
{int x,y,t;//坐标和时间
};int bfs(int x,int y)//从00点开始
{queue<node> mq;node nod; nod.x=x,nod.y=y,nod.t=0;mq.push(nod);while(!mq.empty()){int cx,cy,px,py,time;nod=mq.front();mq.pop();cx=nod.x,cy=nod.y,time=nod.t;if(mp[cx][cy]==maxn)//没有被炸掉 {//cout<<time<<endl;return time;}for(int i=0;i<4;i++)//(0,0)上下左右跑 {px=cx+dir[i][0],py=cy+dir[i][1];nod.x=px,nod.y=py,nod.t=time+1;if(px>=0&&py>=0&&!visi[px][py]&&nod.t<mp[px][py])//nod。t小于他说明可以走这个点 {visi[px][py]=1;mq.push(nod);}}}return -1;
}int main()
{int n,i,j;int x,y,tim,cx,cy;while(cin>>n){for(i=0;i<304;i++)for(j=0;j<304;j++)mp[i][j]=maxn;while(n--){scanf("%d%d%d",&x,&y,&tim);mp[x][y]=min(mp[x][y],tim);//mp存的是最早爆的时间 for(i=0;i<4;i++)// 他上下左右四个点位全爆掉 {cx=x+dir[i][0],cy=y+dir[i][1];if(cx>=0&&cy>=0)    mp[cx][cy]=min(mp[cx][cy],tim);//点在第一象限内 }}memset(visi,0,sizeof(visi));//初始化标志数组 visi[0][0]=1;int res=bfs(0,0);cout<<res<<endl;}return 0;
}

(BFS)Meteor Shower (poj3669)相关推荐

  1. 广搜(BFS)和深搜(DFS)

    广搜(BFS)和深搜(DFS) 文章目录 广搜(BFS)和深搜(DFS) 一.广搜(BFS) 二.深搜(DFS) 一.广搜(BFS) #include <bits/stdc++.h> us ...

  2. 【POJ - 3669】Meteor Shower(bfs)

    -->Meteor Shower 直接上中文了 Descriptions: Bessie听说有场史无前例的流星雨即将来临:有谶言:陨星将落,徒留灰烬.为保生机,她誓将找寻安全之所(永避星坠之地) ...

  3. LeetCode 773. 滑动谜题(BFS 地图状态转换的最短距离)

    1. 题目 在一个 2 x 3 的板上(board)有 5 块砖瓦,用数字 1~5 来表示, 以及一块空缺用 0 来表示. 一次移动定义为选择 0 与一个相邻的数字(上下左右)进行交换. 最终当板 b ...

  4. 【PTA】龙舌兰酒吧 (BFS求双源最短路)

    目录 1.题目描述 2.输入输出 3.解题思路 4.样例解析 5.代码实现 1.题目描述 有一个大小为n*m的矩形小镇,城镇上有房屋("#"表示无法通过),有空地(".& ...

  5. WUST 2090 HLD与停车场(bfs||dfs||暴力模拟||巧妙思维)

    2090: HLD与停车场 Time Limit: 1 Sec   Memory Limit: 128 MB   64bit IO Format: %lld Submitted: 21   Accep ...

  6. poj3669 Meteor Shower(预处理+bfs)

    https://vjudge.net/problem/POJ-3669 先给地图a[][]预处理每个位置被砸的最小时间.然后再bfs. 纯bfs,还被cin卡了下时间.. 1 #include< ...

  7. 【POJ - 3026】Borg Maze(bfs预处理 + 最小生成树,建图)

    题干: The Borg is an immensely powerful race of enhanced humanoids from the delta quadrant of the gala ...

  8. LeetCode 1263. 推箱子(BFS+DFS / 自定义哈希set)

    文章目录 1. 题目 2. 解题 2.1 超时解 2.2 BFS + DFS 1. 题目 「推箱子」是一款风靡全球的益智小游戏,玩家需要将箱子推到仓库中的目标位置. 游戏地图用大小为 n * m 的网 ...

  9. poj 3322 Bloxorz I (bfs+辅助数组减代码量)

    很好玩的一个游戏,建议大家做完了去玩一玩~. 方块的状态有3种情况,竖着,横躺着,竖躺着,所以可以用一个标记变量表示. 对于判重,可以开一个三维的数组来判断. 麻烦的地方在于移动,如果直接模拟的话,将 ...

最新文章

  1. 如何从NumPy直接创建RNN?
  2. 多个流,简短的读和写
  3. sd 卡驱动--基于高通平台
  4. 栈劫持(栈迁移)介绍
  5. Console-算法[for]-打印出杨辉三角形
  6. [原]Console小技巧——Console版贪食蛇
  7. 易语言源代码毁来者来了!!
  8. 关于Spring注入方式的几道面试题,你能答上么?
  9. 长方形旋转html5,HTML5/SVG旋转长方形来得到六边形图案
  10. OpenCV-图像处理(10、膨胀与腐蚀)
  11. Activiti6工作流入门初体验
  12. 移动端前端开发技术概况
  13. 【VHDL】半减器和全减器的设计
  14. Android JTT808协议通讯
  15. tv 斐讯n1原生android_斐讯T1刷原生安卓TV
  16. Mendix装备制造业应用 | 云上全流程透明性备品备件协同管理
  17. javascript学习之路1
  18. 文件夹快速隐藏,文件夹选项中勾选隐藏目录依旧不能使其显示
  19. PCIe系列专题之二:2.5 Flow Control缓存架构及信用积分
  20. 设计模式之里氏替换原则

热门文章

  1. C语言简单的练习题目——牛生牛
  2. C语言小白适合入门的项目——扫雷
  3. PyQt5 QTreeWidget更改item项前的展开折叠三角图标
  4. 一个4体低位交叉的存储器_前交叉韧带术后关节粘连的康复策略
  5. mysql创建表属性引_【学习之Mysql数据库】mysql数据库创建表的属性详解
  6. 请解释自动装配模式的区别?_如何从齿条优化方面有效节约机床装配时间
  7. python 中split函数的应用_举例详解Python中的split()函数的使用方法
  8. QQ浏览器如何修改截屏快捷键?QQ浏览器修改截屏快捷键的方法
  9. Java锁之可重入锁介绍
  10. Java之路:this关键字的用法