水灾(sliker.cpp/c/pas) 1000MS  64MB

大雨应经下了几天雨,却还是没有停的样子。土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没。

CCY所在的城市可以用一个N*M(N,M<=50)的地图表示,地图上有五种符号:“. * X D S”。其中“X”表示石头,水和人都不能从上面经过。“.”表示平原,CCY和洪水都可以经过。“*”表示洪水开始地方(可能有多个地方开始发生洪水)。“D”表示CCY的别墅。“S”表示CCY现在的位置。

CCY每分钟可以向相邻位置移动,而洪水将会在CCY移动之后把相邻的没有的土地淹没(从已淹没的土地)。

求CCY回到别墅的最少时间。如果聪哥回不了家,就很可能会被淹死,那么他就要膜拜黄金大神涨RP来呼叫直升飞机,所以输出“ORZ hzwer!!!”。

输入文件 sliker.in

输出文件 sliker.out

Input

3 3

D.*

.S.

Output

3

Input

3 3

D.*

..S

Output

ORZ hzwer!!!

Input

3 6

D…*.

.X.X..

….S.

Output

6

分析:找出洪水开始的所有节点,写两个广搜,另一个搜索洪水走的路线bfs_1,一个搜索人走的路线 bfs_2。

在bfs_2中,人每走一步之前,先bfs_1搜索洪水下一秒将要淹没点,然后搜索人走的路线。

 #include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
#include<iostream> using namespace std;
const int N = ; struct node{
int x,y,step;
}cur,nxt,t,u; queue <node> q;
queue <node> q2;
int mp[N][N];
bool v[N][N],v2[N][N];
int dx[] = {,,,-};
int dy[] = {,,-,};
int n,m,ex,ey,sx,sy,now;
char ch; void bfs_1(int w) //搜出w+1秒的地图
{
while(!q.empty())
{
cur = q.front();
if(cur.step!=w) return ;
q.pop();
for(int i=;i<;++i)
{
int a = dx[i]+cur.x;
int b = dy[i]+cur.y;
if(a> && b> && a<=n && b<=m && mp[a][b]== && !v[a][b])
{
if(a==ex && b==ey) continue;
mp[a][b] = ;
v[a][b] = true;
nxt.x = a; nxt.y = b; nxt.step = cur.step+;
q.push(nxt);
}
}
}
}
void bfs_2()
{
now = ;
bfs_1(now);
t.x = sx; t.y = sy; t.step = ;
q2.push(t);
v2[sx][sy] = true;
while(!q2.empty())
{
t = q2.front();
if(t.step!=now)
{now++; bfs_1(now); continue;}
q2.pop();
for(int i=;i<;++i)
{
int a = dx[i]+t.x;
int b = dy[i]+t.y;
if(a> && b> && a<=n && b<=m && mp[a][b]== && !v2[a][b])
{
if(a==ex && b==ey)
{
printf("%d\n",t.step+);return ;
}
v2[a][b] = true;
u.x = a; u.y = b; u.step = t.step+;
q2.push(u);
}
}
}
printf("ORZ hzwer!!!\n");
}
int main()
{
freopen("sliker.in","r",stdin);
freopen("sliker.out","w",stdout);
scanf("%d%d",&n,&m);
for(int i=;i<=n;++i)
for(int j=;j<=m;++j)
{
cin>>ch;
if(ch=='S') sx=i,sy=j,mp[i][j]=;
else if(ch=='D') ex=i,ey=j,mp[i][j]=;
else if(ch=='*')
{
mp[i][j] = ;
v[i][j] = true;
cur.x = i; cur.y = j; cur.step = ;
q.push(cur);
}
else if(ch=='.') mp[i][j] = ;
else if(ch=='X') mp[i][j] = ;
}
bfs_2();
return ;
}

水灾 1000MS 64MB (广搜)的更多相关文章

  1. T4870 水灾(sliker.cpp/c/pas) 1000MS 64MB

    题目描述 大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没. CCY所在的城市可以用一个N*M(N,M<=50)的地图表 ...

  2. poj 3984:迷宫问题(广搜,入门题)

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7635   Accepted: 4474 Description ...

  3. 双向广搜 POJ 3126 Prime Path

      POJ 3126  Prime Path Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 16204   Accepted ...

  4. 广搜+打表 POJ 1426 Find The Multiple

    POJ 1426   Find The Multiple Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 25734   Ac ...

  5. hdu 1242:Rescue(BFS广搜 + 优先队列)

    Rescue Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

  6. poj 3026 Borg Maze 最小生成树 + 广搜

    点击打开链接 Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7097   Accepted: 2389 ...

  7. (广搜)Fire Game -- FZU -- 2150

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=82828#problem/I Fire Game Time Limit:1000MS    ...

  8. Eight_pku_1077(广搜).java

    Eight Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 21718   Accepted: 9611   Special ...

  9. POJ3984 BFS广搜--入门题

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 20816   Accepted: 12193 Descriptio ...

随机推荐

  1. MATLAB入门学习(一)

    开始MATLAB入门啦,,,首先感谢xyy大神的帮助!然后我们开始学习吧!<( ̄︶ ̄)↗[GO!] 工作空间窗口:保存了你定义的常量,变量之类的,可以保存也可以被调用. 保存的话会生成一个mat ...

  2. PyCharm Django项目开发的调试方法

    下面介绍两种PyCharm Django项目开发的调试方法: 方法一: 1. 使用PyCharm 自带的django项目Debug工具, 当然前提条件是django项目环境已经搭建好了. 2. 在代码 ...

  3. springmvc(5)拦截器

    1.什么是拦截器 是指通过统一的拦截从浏览器发送到服务器的请求来完成相应服务增强 2.拦截器的基本原理 可以通过配置过滤器解决乱码问题 和过滤器非常相似 3.搭建工程 注意jar包 此时的工程是完成后 ...

  4. 从零一起学Spring Boot之LayIM项目长成记(二) LayIM初体验

    前言 接上篇,已经完成了一个SpringBoot项目的基本搭建.那么现在就要考虑要做什么,怎么做的问题.所以本篇内容不多,带大家一起来简单了解一下要做的东西,之前有很多人不知道从哪里下手,那么今天我带 ...

  5. 手绘web原型设计的感受

    当下有许多流行的Web原型设计工具,比如mockplus等,mockplus在我们团队初次开发rms系统用到过,确实还不错,但是,原型工具有其优势也有其劣势. 礼拜一开会时,经理跟我说,觉得现在的LM ...

  6. C#处理List<object>重复数据的问题

    private class ListDistinct : IEqualityComparer<object> { public bool Equals(object x, object y ...

  7. 作为测试新手,web测试从何开始学起?

    我们先来弄清楚web测试的测试范围,通常web测试包含:功能测试.性能测试.浏览器兼容测试.安全测试以及用户界面测试等.那么,作为一个初级测试员或者实习测试员,最开始的能做的只能是功能测试和用户界面测 ...

  8. Dynamic Ambient Occlusion and Indirect Lighting

    This sample was presented on the Nvida witesite, which detail a new idea to calculate the ambient oc ...

  9. LeetCode 中级 -二叉树的层次遍历(102)

    题目描述: 给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 ...

  10. golang刷Leetcode系列 --- 加1

    加一 给定一个非负整数组成的非空数组,在该数的基础上加一,返回一个新的数组. 最高位数字存放在数组的首位, 数组中每个元素只存储一个数字. 你可以假设除了整数 0 之外,这个整数不会以零开头. 示例 ...