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. Prepared statements(mysqli & pdo)

    参考: http://php.net/manual/en/mysqli.quickstart.prepared-statements.php http://www.ultramegatech.com/ ...

  2. UBI FAQ and HOWTO

    转:http://www.linux-mtd.infradead.org/faq/ubi.html UBI FAQ and HOWTO Table of contents How do I enabl ...

  3. Transact-SQL三值逻辑

    /*===========================<一>========================== 在SQL中逻辑表达式的值有三种: 1.TRUE 2.FALSE 3.U ...

  4. Java SE ---流程控制语句

     java的控制流程有三种: 一,顺序流程             自上而下,按照代码的先后顺序执行 二,分支流程             1,if/else语句             2,swit ...

  5. [经典算法] 蒙地卡罗法求 PI

    题目说明: 蒙地卡罗为摩洛哥王国之首都,该国位于法国与义大利国境,以赌博闻名.蒙地卡罗的基本原理为以乱数配合面积公式来进行解题,这种以机率来解题的方式带有赌博的意味,虽然在精确度上有所疑虑,但其解题的 ...

  6. 强大的JQuery(三)--操作html与遍历

    前两篇博客讲到了JQuery的基础知识以及其动画效果,本篇将为大家介绍jquery操纵html以及jquery的遍历. 一.jquery操作html 1.获取内容和属性 text() - 设置或返回所 ...

  7. ASP.NET FormsAuthentication跨站点登录时绝对地址返回的问题

    关键字:FormsAuthentication, loginUrl, ReturnUrl, AbsoluteUri 在ASP.NET应用程序中,FormsAuthentication几乎是标配,但Fo ...

  8. 主机、虚拟机、开发板(u-boot)之间的连接 - ping测试

    1.设置主机的IP地址(这里注意,设置一定要设置网线宽带IP,不要选成无线网络的) 查看重点是否本地以太网卡(Realtek PCIe……) 2.修改本地连接3个IP地址,一定主机.虚拟机.开发板 三 ...

  9. html5 requestAnimationFrame制作动画:旋转风车

    详细内容请点击 在以往,我们在网页上制作动画效果的时候,如果是用javascript实现,一般都是通过定时器和间隔来实现的,出现HTML5之后,我们还可以用CSS3 的transitions和anim ...

  10. 【转载]】Microsoft SQL Server, 错误:4064的解决方法

    SQL SERVER – Fix : Error: 4064 – Cannot open user default database. Login failed. Login failed for u ...