题目描述

大雨应经下了几天雨,却还是没有停的样子。土豪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. C++11,控制台输出的一段小程序。

    #include <iostream> // std::cout, std::boolalpha, std::noboolalpha int main () { bool b = true ...

  2. Unity构造函数注入代码示例

    Unity构造函数注入代码示例 如果使用 Unity 实例化一个类,该类的构造函数依赖一个或多个其他类,则 Unity 会为构造函数自动创建参数中指定的被依赖的类的实例.例如,下面的代码展示了一个名为 ...

  3. 【STORAGE】Qlogic FC存储交换机cmd配置方法

    *************************************************************** ****原文: blog.csdn.net/clark_xu  徐长亮专 ...

  4. c语言中 %p的含义【转】

    本文转载自:http://blog.csdn.net/creat2012/article/details/44224217 今天看到了一个%p,表示没有看到过. = =.学习了. 格式控制符“%p”中 ...

  5. JPEG库在Linux系统下的编译和移植【转】

    本文转载自: 这篇文章介绍了jpeg库在Linux系统下的编译和移植,经过了亲自的验证,编译首先需要准备以下资源:jpegsrc.v6b.tar.gz(jpeg库),libtool-1.5.26.ta ...

  6. 2强类型DataSet (2011-12-30 23:16:59)转载▼ 标签: 杂谈 分类: Asp.Net练习笔记 http://blog.sina.com.cn/s/blog_9d90c4140101214w.html

    强类型DataSet (2011-12-30 23:16:59) 转载▼ 标签: 杂谈 分类: Asp.Net练习笔记 using System; using System.Collections.G ...

  7. hdu 5289(单调队列)

    Assignment Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  8. hibernate映射文件set key one-to-many

    转自:https://www.linuxidc.com/Linux/2013-11/92228.htm 1 hibernate映射文件set key one-to-many的配置. POJOs如下: ...

  9. socket实现进程间通信(转载)

    转自:http://blog.csdn.net/ast_224/article/details/3962221 使用socket实现进程间通信:(UNIX domain中面向连接通信) 使用套接字除了 ...

  10. Linux使用笔记: 使用Samba访问windows的共享目录(转载)

    转自:http://easwy.com/blog/archives/mount-a-windows-shared-folder-on-linux-with-samba/ 通常我们使用Samba都是在W ...