poj_3669_Meteor Shower(BFS+预处理)


http://poj.org/problem?id=3669
/*思路:BFS+预处理
先预处理会爆炸的区域,BFS,遇到-1则结束*/
#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;
int visit[1001][1001];
int dx[5] = {0,0,1,0,-1};
int dy[5] = {0,1,0,-1,0};
typedef struct
{
	int x,y;
	int step;
}point;
queue<point> que;
int bfs(int x,int y)
{
	int cnt;
	if(visit[0][0] == 0)  return -1;//无法逃离
	if(visit[0][0] == -1) return 0;  //安全,无需逃离
	point s,cur,next;
	s.x = x;
	s.y = y;
	s.step = 0;
	que.push(s);
	while(!que.empty())
	{
		cur = que.front();
		que.pop();
		for(int i = 0;i < 5;i++)
		{
			next.x = cur.x + dx[i];
			next.y = cur.y + dy[i];
			next.step = cur.step + 1;

			if(next.x >= 0 && next.y >= 0 && next.y < 1001 && next.x < 1001)
			{
				if(visit[next.x][next.y] == -1)
				{
					return next.step;
				}
				if(next.step < visit[next.x][next.y])
				{
					visit[next.x][next.y] = next.step;//记录最小的步数
					que.push(next);
				}
			}
		}
	}
	return -1;
}
int main()
{

	int m;
    while(cin >> m)
	{
        int x,y,t,xx,yy;
	    memset(visit,-1,sizeof(visit));
	    for(int i = 0;i < m;i++)
	    {
	        cin >> x >> y >> t;

	        for(int i = 0;i <= 4;i++)
	        {
	            xx = x + dx[i];
	            yy = y + dy[i];
	            if(xx >= 0 && yy >= 0 && xx < 1001 && yy < 1001)//保证在有限区域内
				{
		            if(visit[xx][yy] == -1)
		            	 visit[xx][yy] = t;
		            else
		            	visit[xx][yy] = min(visit[xx][yy],t);
				}
	        }
	    }
	    cout << bfs(0,0) << "\n";
	}
    return 0;
}

时间: 2024-10-16 12:10:49

poj_3669_Meteor Shower(BFS+预处理)的相关文章

HDU 3533 Escape(BFS+预处理)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3533 题目大意:给你一张n* m的地图,人在起点在(0,0)要到达终点(n,m)有k(k<=100)座炮台,每座炮台都有各自的发射方向.发射周期和发射速度,每隔一段时间会发射一定速度的炮弹,人每秒可以选择停在原地或者往上下左右走,问是否能在时间d之内安全到达终点.如果可以,请输出最短时间. 解题思路:BFS+预处理,分为以下几点: ①预处理,用step[x][y][t]记录(x,y)在时间t是否被炮

poj3026Borg Maze(bfs预处理+最小生成树)

题目链接: 啊哈哈,点我点我 思路: 首先把图中的A S预处理出来,然后对这些点逐一做bfs找到这些点到其它点的最短路径,然后建图完毕也用最小生成树的prim算法或者kruscal算法求出连接所有点的最短距离..不知道为嘛用dis数组去维护为什么会超时,而在结构体里面用step数组却可以过,我也不知道为什么,纠结了很多天..我把错误的代码贴出来,希望各位帮我找出原因,不胜感激... 题目: Borg Maze Time Limit: 1000MS   Memory Limit: 65536K T

[SCU 4498] RunningPhoton&#39;s Nightmare (BFS预处理+SPFA)

SCU - 4498 给定一张网格图,其中有一些不可到达点和一些时间重置装置 RunningPhoton从起点出发,身上有一个定时炸弹,当时间置0时他就会死 但是在置0前碰到时间重置装置又能重置时间 问 RunningPhoton是否能到达终点 若能,则输出最短时间,若不能,则输出 "Poor RunningPhoton" 这题虽然地图是有 600*600,但是有不超过 150个重置装置 普通 bfs搜的话肯定爆炸,因为你要存每个装置是否被用过了 正确解法如下: 因为我们只关心重置装置

【2016 ICPC亚洲区域赛北京站 E】What a Ridiculous Election(BFS预处理)

Description In country Light Tower, a presidential election is going on. There are two candidates,  Mr. X1 and Mr. X2, and both of them are not like good persons. One is called a liar and the other is called a maniac. They tear(Chinese English word,

POJ 3669 Meteor Shower (BFS + 预处理)

Meteor Shower Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9677   Accepted: 2718 Description Bessie hears that an extraordinary meteor shower is coming; reports say that these meteors will crash into earth and destroy anything they hi

poj3669 Meteor Shower(BFS)

题目链接:poj3669 Meteor Shower 我只想说这题WA了后去看讨论才发现的坑点,除了要注意原点外,流星范围题目给的是[0,300],到302的位置就绝对安全了... 1 #include<cstdio> 2 #include<cmath> 3 #include<queue> 4 #include<cstring> 5 #include<algorithm> 6 #define CLR(a,b) memset((a),(b),siz

cdoj 1380 Xiper的奇妙历险(2) [八数码问题 bfs + 预处理]

快要NOIP 2016 了,现在已经停课集训了.计划用10天来复习以前学习过的所有内容.首先就是搜索. 八数码是一道很经典的搜索题,普通的bfs就可求出.为了优化效率,我曾经用过康托展开来优化空间,甚至还用过A*来优化时间.不过这道题懒得写了,就一个普普通通的bfs,再加上一个stl 的map就水过了. 首先题目要求有多达10000组数据,依次搜索肯定是不行的,我试过用A*来写,第2组数据就会T掉,所以我们考虑用一个预处理.从末尾状态搜索所有可行的状态,并用一个map来存储答案.然后就很好写了.

HDU 3567 Eight II BFS预处理

题意:就是八数码问题,给你开始的串和结束的串,问你从开始到结束的最短且最小的变换序列是什么 分析:我们可以预处理打表,这里的这个题可以和HDU1430魔板那个题采取一样的做法 预处理打表,因为八数码问题实际上是每个小块位置的变化,上面的数字只是用来标记位置的, 所以通过映射将初末序列进行置换就好了,然后因为每次的x字符的置换位置不一样 所以需要以123456789这个初始串打9遍表就好了733ms #include <iostream> #include <cstdio> #inc

POJ3669(Meteor Shower)(bfs求最短路)

Meteor Shower Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12642   Accepted: 3414 Description Bessie hears that an extraordinary meteor shower is coming; reports say that these meteors will crash into earth and destroy anything they h