题目描述

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

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

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

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

输入输出格式

输入格式:

3 3
D.*


.S.

输出格式:

3

输入输出样例

输入样例#1:

3 3
D.*

..S
输出样例#1:

ORZ hzwer!!!
输入样例#2:

3 6
D…*.
.X.X..
….S.
输出样例#2:

6

很简单的广搜问题,按照题目的要求模拟即可
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
int n,m;
int xx[]={-,+,,};
int yy[]={,,-,+};
struct peo
{
int juli;//
int x,y;
int step;
}now,nxt;
int map[][];
int bgx,bgy,homex,homey;
int vis[][];// 被洪水淹没的地方,注意要map和vis同时判断
int ans=;
int watercishu=;
int flag=;
int vis2[][];
int calca(int xxx,int yyy)
{
return max(xxx,homex)-min(xxx,homex)+max(yyy,homey)-min(yyy,homey);
}
void init()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
{
char p;
cin>>p;
if(p=='.')
map[i][j]=;// 都可以通过
else if(p=='X')
map[i][j]=;// 都不可以通过
else if(p=='S')
{map[i][j]=;//人现在的位置
bgx=i;bgy=j;}
else if(p=='*')
map[i][j]=,vis[i][j]=;// 洪水开始的地方
else if(p=='D')
{
map[i][j]=;// 家
homex=i;
homey=j;
} }
}
void ex()
{
int flag=;
for(int i=;i<=n;i++)
{
for(int j=;j<=m;j++)
{
if(vis[i][j]==watercishu)
{
for(int k=;k<;k++)
{
int wx=i+xx[k];
int wy=j+yy[k];
if(vis[wx][wy]==&&map[wx][wy]!=&&map[wx][wy]!=&&wx>=&&wx<=n&&wy>=&&wy<=m)
{
vis[wx][wy]=vis[i][j]+;
}
}
}
}
}
watercishu++;
}
void bfs()
{
queue<peo>q;
now.x=bgx;now.y=bgy;now.step=;now.juli=calca(bgx,bgy);
q.push(now);
int last=;// 记录上一次洪水扩展时人走的步数
while(q.size()!=)
{
peo p=q.front();
if(vis[p.x][p.y]!=)
{
q.pop();
continue;
}
if(p.juli==)
{
printf("%d",p.step);
flag=;
return ;
} q.pop();
if(p.step>last)
{
ex();// 洪水扩展
last=p.step;
}
if(vis[p.x][p.y]!=)
{
continue;
}
for(int i=;i<;i++)
{
int wx=p.x+xx[i];
int wy=p.y+yy[i];
if(vis2[wx][wy]==&&vis[wx][wy]==&&map[wx][wy]!=&&wx>=&&wx<=n&&wy>=&&wy<=m)
{
vis2[wx][wy]=;
nxt.x=wx;
nxt.y=wy;
nxt.step=p.step+;
nxt.juli=calca(wx,wy);
q.push(nxt);
}
} }
}
int main()
{
/// freopen("sliker.in","r",stdin);
// freopen("sliker.out","w",stdout);
init();
bfs();
if(flag==)
printf("ORZ hzwer!!!");
return ;
}

T4870 水灾(sliker.cpp/c/pas) 1000MS 64MB的更多相关文章

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

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

  2. 某种数列问题 (jx.cpp/c/pas) 1000MS 256MB

    众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以后,今天他有非(chi)常(bao)认(cheng)真(zhe)去研究一 ...

  3. T4869 某种数列问题 (jx.cpp/c/pas) 1000MS 256MB

    题目描述 众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以后,今天他有非(chi)常(bao)认(cheng)真(zhe ...

  4. 水灾 1000MS 64MB (广搜)

    水灾(sliker.cpp/c/pas) 1000MS  64MB 大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没. CCY ...

  5. 洛谷——P2071 座位安排 seat.cpp/c/pas

    P2071 座位安排 seat.cpp/c/pas 题目背景 公元二零一四年四月十七日,小明参加了省赛,在一路上,他遇到了许多问题,请你帮他解决. 题目描述 已知车上有N排座位,有N*2个人参加省赛, ...

  6. 2012_p2 寻宝 (treasure.cpp/c/pas)

    2012_p2 寻宝 (treasure.cpp/c/pas) 时间限制: 1 Sec  内存限制: 128 MB提交: 23  解决: 9[提交][状态][讨论版][命题人:外部导入] 题目描述 2 ...

  7. 2012_p1 质因数分解 (prime.cpp/c/pas)

    2012_p1 质因数分解 (prime.cpp/c/pas) 时间限制: 1 Sec  内存限制: 128 MB提交: 80  解决: 27[提交][状态][讨论版][命题人:外部导入] 题目描述 ...

  8. 模拟赛 Problem 3 经营与开发(exploit.cpp/c/pas)

    Problem 3 经营与开发(exploit.cpp/c/pas) [题目描述] 4X概念体系,是指在PC战略游戏中一种相当普及和成熟的系统概念,得名自4个同样以“EX”为开头的英语单词. eXpl ...

  9. 模拟赛 Problem 2 不等数列(num.cpp/c/pas)

    Problem 2 不等数列(num.cpp/c/pas) [题目描述] 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”.问在所有排列中,有多少个排列恰好有 ...

随机推荐

  1. React通过Ajax获取数据

    React 组件的数据可以通过 componentDidMount 方法中的 Ajax 来获取,当从服务端获取数据库可以将数据存储在 state 中,再用 this.setState 方法重新渲染 U ...

  2. HDU OJ u Calculate e

    这是一道简单的数学计算问题   主义好输出格式就好 #include<stdio.h> int main() { printf("n e\n- -----------\n&quo ...

  3. Android Service 不被杀死并提高优先级

    Android Service 不被杀死有两种思路,一种是将APP设置为系统应用.还有一种是增强service的生命力.即使屏幕背光关闭时也能执行. 因为设置为系统应用须要root.所以一般使用后一种 ...

  4. CUDA编程(十)使用Kahan&#39;s Summation Formula提高精度

    CUDA编程(十) 使用Kahan's Summation Formula提高精度 上一次我们准备去并行一个矩阵乘法.然后我们在GPU上完毕了这个程序,当然是非常单纯的把任务分配给各个线程.也没有经过 ...

  5. 一个JS引发的跨域问题

    忽然遇上跨域错误. 我们有张页面,使用了EXT.js,在本地运行正常,部署到服务器上,出不来数据.F12调试,提示有跨域错误? XMLHttpRequest cannot load http://19 ...

  6. iOS开发——高级篇——iOS抽屉效果实现原理

    实现一个简单的抽屉效果: 核心思想:KVO实现监听mainV的frame值的变化 核心代码: #import "ViewController.h" // @"frame& ...

  7. sql 语法树 常量

    SELECT id,'|',url,'|',update_time FROM tab LIMIT 10;SELECT COUNT(1) AS parent,(SELECT COUNT(1) FROM ...

  8. YTU 1076: SPY

    1076: SPY 时间限制: 1 Sec  内存限制: 128 MB 提交: 6  解决: 6 题目描述 The National Intelligence Council of X Nation ...

  9. 解决多次异步请求紊乱问题 - JavaScript

    加入目前的需求这样的:       左边的菜单链接,点击后通过异步请求返回其HTML代码,然后innerHTML到右面的DIV中,加入切换菜单的速度非常快,最终会导致请求紊乱. 可以加入消息管理机制, ...

  10. 如何制作.a静态库?合成多架构静态库?

    08_01静态库 08_02制作静态库 .a 1.新建项目com+shift+n:选择Framework&Library. 2.下一步. 项目名不能为中文. 3.编写代码之后.用真机运行.会自 ...