Meteor Shower
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 16339   Accepted: 4293

Description

Bessie hears that an extraordinary meteor shower is coming; reports say that these meteors will crash into earth and destroy anything they hit. Anxious for her safety, she vows to find her way to a safe location (one that is never destroyed by a meteor) . She is currently grazing at the origin in the coordinate plane and wants to move to a new, safer location while avoiding being destroyed by meteors along her way.

The reports say that M meteors (1 ≤ M ≤ 50,000) will strike, with meteor i will striking point (XiYi) (0 ≤ X≤ 300; 0 ≤ Y≤ 300) at time Ti (0 ≤ Ti  ≤ 1,000). Each meteor destroys the point that it strikes and also the four rectilinearly adjacent lattice points.

Bessie leaves the origin at time 0 and can travel in the first quadrant and parallel to the axes at the rate of one distance unit per second to any of the (often 4) adjacent rectilinear points that are not yet destroyed by a meteor. She cannot be located on a point at any time greater than or equal to the time it is destroyed).

Determine the minimum time it takes Bessie to get to a safe place.

Input

* Line 1: A single integer: M
* Lines 2..M+1: Line i+1 contains three space-separated integers: XiYi, and Ti

Output

* Line 1: The minimum time it takes Bessie to get to a safe place or -1 if it is impossible.

Sample Input

4
0 0 2
2 1 2
1 1 2
0 3 5

Sample Output

5
题意: 牛Bessie想要躲避流星雨,于是准备乘飞机逃跑。首先已知有M颗流星,每颗流星的位置(x,y)以及下落的时间t都已知,牛的出发点位于坐标轴原点,现在牛想要跑到一个流星砸不到的点,问至少要花多少时间(牛在出发点的时间记为0,每走一步花1单位的时间)。
思路:首先用一张图来记录每一个点会被流星砸到的最早时间,若某点不会被砸到则可记为无穷大,之后广度优先搜索,对于每一个点,若在图的范围并且当前时间还没被流星砸到且没被访问过,那么访问,之后看一下该点是否安全,安全就退出搜索,否则将该点入队。
AC代码:
#define _CRT_SECURE_NO_DEPRECATE
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
const int N_MAX = ;
int field[N_MAX][N_MAX];//标记好每个位置被流星砸的时间
bool visited[N_MAX][N_MAX];
int direction[][] = { {,},{-,},{,},{,-},{,} };
int last;
struct MM {
int X, Y, T;
bool operator<(const MM&b)const{
return T < b.T;
}
};
MM m[];
int bfs(const int &x1,const int &y1,const int&cur_T) {
memset(visited, , sizeof(visited));
visited[x1][y1] = true;
queue<MM>que;MM cur;
cur.X = x1;cur.Y = y1, cur.T = cur_T;
que.push(cur);
while (!que.empty()) {
MM p = que.front();que.pop();
for (int i = ;i < ;i++) {
cur = p;
cur.X = direction[i][] + p.X; cur.Y = direction[i][] + p.Y;
cur.T++;
if (cur.X>= && cur.Y>= && field[cur.X][cur.Y]>cur.T&&!visited[cur.X][cur.Y]) {
visited[cur.X][cur.Y] = true;
if (field[cur.X][cur.Y]>last)//说明这一点不会被炸到
return cur.T;
que.push(cur);
}
}
}
return -;
}
int main() {
int M;
scanf("%d",&M);
for (int i = ;i < M;i++)
scanf("%d%d%d",&m[i].X,&m[i].Y,&m[i].T); sort(m,m+M);//按流星砸的时间的先后顺序排
last = m[M - ].T; for (int i = ;i < N_MAX;i++) {
for (int j = ;j < N_MAX;j++)
field[i][j] = INT_MAX;
} for (int i = ;i < M;i++) {
for (int j = ;j < ;j++) {
int x = m[i].X + direction[j][],y=m[i].Y+direction[j][];
if (x >= && y >= && field[x][y]>m[i].T) field[x][y] = m[i].T;
}
} if (field[][] == )
cout << - << endl;
else {
cout << bfs(,,) << endl;
} return ;
}

poj 3669 Meteor Shower的更多相关文章

  1. POJ 3669 Meteor Shower(流星雨)

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

  2. POJ 3669 Meteor Shower【BFS】

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

  3. poj 3669 Meteor Shower(bfs)

    Description Bessie hears that an extraordinary meteor shower is coming; reports say that these meteo ...

  4. POJ 3669 Meteor Shower (BFS+预处理)

    Description Bessie hears that an extraordinary meteor shower is coming; reports say that these meteo ...

  5. 题解报告:poj 3669 Meteor Shower(bfs)

    Description Bessie hears that an extraordinary meteor shower is coming; reports say that these meteo ...

  6. POJ 3669 Meteor Shower BFS求最小时间

    Meteor Shower Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 31358   Accepted: 8064 De ...

  7. POJ 3669 Meteor Shower BFS 水~

    http://poj.org/problem?id=3669 题目大意: 一个人从(0,0)出发,这个地方会落下陨石,当陨石落在(x,y)时,会把(x,y)这个地方和相邻的的四个地方破坏掉,求该人到达 ...

  8. 【POJ 3669 Meteor Shower】简单BFS

    流星雨撞击地球(平面直角坐标第一象限),问到达安全地带的最少时间. 对于每颗流星雨i,在ti时刻撞击(xi,yi)点,同时导致(xi,yi)和上下左右相邻的点在ti以后的时刻(包括t)不能再经过(被封 ...

  9. BFS搜索:POJ No 3669 Meteor Shower

    #include <iostream> #include <cstring> #include <queue> #include <cstdio> #i ...

随机推荐

  1. because it is not a variable 编译错误解决方案

    1,将Stuct换为class 2,使用中间变量, 如Point p=new Point(x,y); this.Location=p; 而不能直接给struct赋值,因为值类型是不能改变的,必须生成新 ...

  2. RHEL 7 命令行注册和激活订阅服务

    导读 前一阵子,红帽推出了开发者免费使用订阅功能,只要注册成为红帽开发者就可以免费使用包括  RHEL7  在内的开发套件. 今天我们就来看一看怎么使用命令行来快速注册和激活订阅服务,以后就可以方便地 ...

  3. docker + swarm 集群

    docker + swarm 集群 导读 Swarm是Docker公司在2014年12月初新发布的容器管理工具.和Swarm一起发布的Docker管理工具还有Machine以及Compose.Swar ...

  4. GNU-ARM汇编

    GNU ARM 汇编指令(2008-10-29 00:16:10) 标签:linux gnu arm 汇编指令 it 分类:技术文摘 第一部分 Linux下ARM汇编语法尽管在Linux下使用C或C+ ...

  5. react-redux 学习笔记

    react 是 view 层的一个框架,负责展示数据:redux 控制数据流动,把数据存在唯一的 store 里,通过 action 来触发事件,reducer 来根据事件处理数据. redux 在通 ...

  6. CentOS 7 使用外部邮箱 发送邮件和附件—mail,mailx

    1.查看软件包是否安装 [root@localhost ~]# rpm -qa|grep mail mailx-12.5-12.el7_0.x86_64 javamail-1.4.6-8.el7.no ...

  7. mybatis--MapperProxy事务

    上篇 详细分析了org.mybatis.spring.mapper.MapperScannerConfigurer 和 org.mybatis.spring.SqlSessionFactoryBean ...

  8. python 基础——generate生成器

    通过列表表达式可以直接生成列表,不过列表一旦生成就需要为所有元素分配内存,有时候会很消耗资源. 所以,如果列表元素可以按照某种算法推算出来,这样就不必创建完整的list,从而节省大量的内存空间. 在P ...

  9. 剑指Offer21 二叉树的层序遍历

    /************************************************************************* > File Name: 21_PrintT ...

  10. 二维码zxing源码分析(一)camera部分

    首先,我们先把zxing的源代码给下载下来,这个网上有很多,我下载的是2.3的,不得不说这个谷歌提供的包包含的功能还是很全面的.     我把下载的包解压后,找到android文件夹,导入到ecpli ...