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 (Xi, Yi) (0 ≤ Xi ≤ 300; 0 ≤ Yi ≤ 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: Xi, Yi, 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. 使用phonegap + appframework2.0框架

    1.页面切换动画结束时卡(禁用动画) 2.搜索或导航标签需要固定(标签选择器动态修改高度) 3.pancel容器默认生成的时候内容不放 通过动态的的$("").empty().ht ...

  2. oc-13-多文件

    Dog.h #import <Foundation/Foundation.h> @interface Dog : NSObject { @public NSString *_name; i ...

  3. HANDLER命令与实现

    MySQL“自古以来”都有一个神秘的HANDLER命令,而此命令非SQL标准语法,可以降低优化器对于SQL语句的解析与优化开销,从而提升查询性能.看到这里,可能有小伙伴不淡定了,这么好的东西为啥没广泛 ...

  4. 《Cortex-M0权威指南》之体系结构---存储器系统

    转载请注明来源:cuixiaolei的技术博客 Cortex-M0处理器为32位处理器,所以具有最大4G的寻址空间.在体系结构上,存储器空间被划分位一系列的区域,每个区域都有推荐的用途,以提高不同设备 ...

  5. 重构12-Break Dependencies(打破依赖)

    有些单元测试需要恰当的测试“缝隙”(test seam)来模拟/隔离一些不想被测试的部分.如果你正想在代码中引入这种单元测试,那么今天介绍的重构就十分有用.在这个例子中,我们的客户端代码使用一个静态类 ...

  6. shell配置环境变量

    我们在使用Xshell开发机时往往会遇到一些问题,比如使用某些命令他会报command not found,,出现这种情况的原因是我们必须要配置一下环境变量,这样就可以在任何path中访问了. 这就需 ...

  7. hdu 2121 , hdu 4009 无定根最小树形图

    hdu 2121 题目:给出m条有向路,根不确定,求一棵最小的有向生成树. 分析:增加一个虚拟节点,连向n个节点,费用为inf(至少比sigma(cost_edge)大).以该虚拟节点为根求一遍最小树 ...

  8. 学习Slim Framework for PHP v3 (四)--get()是怎么加进去的?

    看看官网加粗的一句话: At its core, Slim is a dispatcher that receives an HTTP request, invokes an appropriate ...

  9. 使用c#将多个文件放入文件夹中,并压缩下载

    ZipClass.cs  这个是一个压缩文件的类,可直接复制使用,使用到的命名空间是 using System.IO;using ICSharpCode.SharpZipLib;using ICSha ...

  10. 基础面试题——HTML/CSS

    1. 常用那几种浏览器测试?有哪些内核(Layout Engine)? (Q1)浏览器:IE,Chrome,FireFox,Safari,Opera. (Q2)内核:Trident,Gecko,Pre ...