【BFS】POJ3669-Meteor Shower

【思路】

预处理时先将陨石落到各点的最短时间纪录到数组中,然后在时间允许的范围内进行广搜。一旦到某点永远不会砸到,退出广搜。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<queue>
 6 using namespace std;
 7 const int MAXN=300+50;
 8 const int INF=0x7f7f7f7f;
 9 struct Rec
10 {
11     int x,y,t;
12 };
13 int m;
14 int map[MAXN][MAXN],vis[MAXN][MAXN];
15 int dx[5]={0,0,1,-1,0};
16 int dy[5]={1,-1,0,0,0};
17
18 int bfs()
19 {
20     queue <Rec> que;
21     Rec temp;
22     temp.x=temp.y=temp.t=0;
23     que.push(temp);
24     vis[0][0]=1;
25
26     while (!que.empty())
27     {
28         Rec head=que.front();
29         que.pop();
30         for (int i=0;i<4;i++)
31         {
32             int tx=head.x+dx[i],ty=head.y+dy[i],tt=head.t+1;
33             if (tx<0 || ty<0 || vis[tx][ty]==1 || map[tx][ty]<=tt) continue;
34             vis[tx][ty]=1;
35
36             temp.x=tx;temp.y=ty;temp.t=tt;
37             que.push(temp);
38             if (map[tx][ty]==INF)
39             {
40                 return tt;
41             }
42         }
43     }
44     return -1;
45 }
46
47 int main()
48 {
49     scanf("%d",&m);
50     memset(map,INF,sizeof(map));
51     memset(vis,0,sizeof(vis));
52     for (int i=0;i<m;i++)
53     {
54         int x,y,t;
55         scanf("%d%d%d",&x,&y,&t);
56         for (int i=0;i<5;i++)
57             if (x+dx[i]>=0 && y+dy[i]>=0 && map[x+dx[i]][y+dy[i]]>t) map[x+dx[i]][y+dy[i]]=t;
58     }
59
60     if (map[0][0]==0) cout<<-1<<endl;
61         else if (map[0][0]==INF) cout<<0<<endl;
62               else cout<<bfs()<<endl;
63     64     return 0;
65 }
时间: 2024-11-10 11:24:37

【BFS】POJ3669-Meteor Shower的相关文章

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

【bfs】【中等难度】tyvj P1234 - bench与奔驰

P1234 - bench与奔驰 From zhangbh001    Normal (OI) 总时限:10s    内存限制:128MB    代码长度 限制:64KB P1234 - bench与奔驰 背景 Background 公园里有个人在练开奔驰 - -!,但是总是撞在bench上 (众人曰:狼来了,快跑啊!) 描述 Description 公园里的bench与奔驰都是无敌的,不会被撞坏.由于开奔驰的人比较"有特点",总是向上下左右四个方向开,而且只会在撞到椅子之后改变方向(

hdoj 1312 Red and Black 【BFS】

题意:一共有四个方向,从'@'出发,找能到达'.'的个数, #是不能通过的. 策略:广搜. 这道题属于最简单的bfs了. 代码: #include<stdio.h> #include<string.h> #include<queue> using std::queue; bool vis[25][25]; char s[25][25]; int n, m; int ans = 0; struct node{ int x, y; }; node st; const int

HDU1242 Rescue 【BFS】

Rescue Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 16314    Accepted Submission(s): 5926 Problem Description Angel was caught by the MOLIGPY! He was put in prison by Moligpy. The prison is

HDU 1253 胜利大逃亡 NYOJ 523【BFS】

胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 24608    Accepted Submission(s): 9427 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个A*B*C的立方体,可以被表示成A个B*C的

NYOJ 284 坦克大战 【BFS】+【优先队列】

坦克大战 时间限制:1000 ms  |  内存限制:65535 KB 难度:3 描述 Many of us had played the game "Battle city" in our childhood, and some people (like me) even often play it on computer now. What we are discussing is a simple edition of this game. Given a map that co

【BFS】uva10047The Monocycle

/* 本题的特殊之处,到达一个格子时,因为朝向不同,以及接触地面的颜色不同, 会处于不同的状态::::::::: 把(x, y, d, c)作为一个结点,表示所在位置(x, y),方向为d,颜色为c;;;;; ------------------------------------------------------------------------ 在方向上我们把前,左,右编号为0,1,2:::: 颜色,从蓝色开始编号为0,1,2,3:::::::::: ------------------

【BFS】uva11624Fire!

/* bfs宽度遍历 -------------------------------------------------------------------------- 对人和火同时进行bfs,,注意应该先火后人,即如果在人到达该格子前,格子已经着火 则不应该走,最后人走到边界无路可走,则IMPOSSIBLE!!!!!!!!!!!! --------------------------------------------------------------------------- 两次bfs

【bfs】hdu 1104 Remainder

[bfs]hdu 1104 Remainder 题目链接:hdu 1104 Remainder 很不错的一道搜索题目,但是有几个关键问题要注意. 最短路径,果断bfs+Queue 路径的存储问题,之前只想把每一步的计算结果存储到queue(int)Q中,后来发现路径无法记录,就选择存储节点的方式并用string保存路径,queue(node)Q,开一个临时的节点node p,每进行一次运算就更新它的路径string+'op',最终输出的一定是完整路径!! 但最关键的是取模!!!!! discus

Poj 3087 Shuffle&#39;m Up 【BFS】

Shuffle'm Up Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 6556 Accepted: 3077 Description A common pastime for poker players at a poker table is to shuffle stacks of chips. Shuffling chips is performed by starting with two stacks of pok