水灾(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
代碼實現:
人和水都是四方向移動。別墅的效果等於石頭,都可以攔截洪水。
#include<cstdio>
#include<iostream>
using namespace std;
int n,m,qsl,qrl,zh,zl,a,b,c,nh,nl;
int qs[][][],qr[][][];//qs存洪水的啟發點,qr存人的。
int hb[]={,,,-},lb[]={,-,,};//洪水和人的四方向移動。
bool map[][],rj[][];//map標記的點,洪水不能走,人也不能走。rj(路徑)標記的點,人不能走。
char ch;
int main(){
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++){
cin>>ch;
if(ch=='X') map[i][j]=;
if(ch=='*'){qs[][qsl][]=i;qs[][qsl++][]=j;map[i][j]=;}
if(ch=='S'){qr[][qrl][]=i;qr[][qrl++][]=j;rj[i][j]=;}
if(ch=='D'){zh=i;zl=j;map[i][j]=;}
}
for(int ans=;;ans++){
if(!qrl) break;
b=(ans+)%;c=ans%;//因為洪水和人的啟發點要各用兩個隊列存。
for(int i=;i<qsl;i++){//雖然說是人先走,但走到一個會在離開前會被洪水淹沒的地方有什麼用。
for(int j=;j<;j++){
nh=qs[b][i][]+hb[j];nl=qs[b][i][]+lb[j];
if(!map[nh][nl]&&nh>&&nh<=n&&nl>&&nl<=m){
map[nh][nl]=;
qs[c][a][]=nh;qs[c][a++][]=nl;//存入洪水的隊列。
}
}
}
qsl=a;a=;//qsl存的是洪水的啟發點個數。
for(int i=;i<qrl;i++){
for(int j=;j<;j++){
nh=qr[b][i][]+hb[j];nl=qr[b][i][]+lb[j];
if(nh==zh&&nl==zl){printf("%d\n",ans);return ;}//要在外面,因為別墅約等於石頭。
if(!rj[nh][nl]&&!map[nh][nl]&&nh>&&nh<=n&&nl>&&nl<=m){//有洪水,石頭,別墅(霧)和之前走過的地方不能走了。
rj[nh][nl]=;
qr[c][a][]=nh;qr[c][a++][]=nl;//存入人的隊列。
}
}
}
qrl=a;a=;//qrl存的是人的啟發點個數。
}
printf("ORZ hzwer!!!\n");
return ;
}
水灾(sliker.cpp/c/pas) 1000MS 64MB的更多相关文章
- T4870 水灾(sliker.cpp/c/pas) 1000MS 64MB
题目描述 大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没. CCY所在的城市可以用一个N*M(N,M<=50)的地图表 ...
- 某种数列问题 (jx.cpp/c/pas) 1000MS 256MB
众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以后,今天他有非(chi)常(bao)认(cheng)真(zhe)去研究一 ...
- T4869 某种数列问题 (jx.cpp/c/pas) 1000MS 256MB
题目描述 众所周知,chenzeyu97有无数的妹子(阿掉!>_<),而且他还有很多恶趣味的问题,继上次纠结于一排妹子的排法以后,今天他有非(chi)常(bao)认(cheng)真(zhe ...
- 水灾 1000MS 64MB (广搜)
水灾(sliker.cpp/c/pas) 1000MS 64MB 大雨应经下了几天雨,却还是没有停的样子.土豪CCY刚从外地赚完1e元回来,知道不久除了自己别墅,其他的地方都将会被洪水淹没. CCY ...
- 洛谷——P2071 座位安排 seat.cpp/c/pas
P2071 座位安排 seat.cpp/c/pas 题目背景 公元二零一四年四月十七日,小明参加了省赛,在一路上,他遇到了许多问题,请你帮他解决. 题目描述 已知车上有N排座位,有N*2个人参加省赛, ...
- 2012_p2 寻宝 (treasure.cpp/c/pas)
2012_p2 寻宝 (treasure.cpp/c/pas) 时间限制: 1 Sec 内存限制: 128 MB提交: 23 解决: 9[提交][状态][讨论版][命题人:外部导入] 题目描述 2 ...
- 2012_p1 质因数分解 (prime.cpp/c/pas)
2012_p1 质因数分解 (prime.cpp/c/pas) 时间限制: 1 Sec 内存限制: 128 MB提交: 80 解决: 27[提交][状态][讨论版][命题人:外部导入] 题目描述 ...
- 模拟赛 Problem 3 经营与开发(exploit.cpp/c/pas)
Problem 3 经营与开发(exploit.cpp/c/pas) [题目描述] 4X概念体系,是指在PC战略游戏中一种相当普及和成熟的系统概念,得名自4个同样以“EX”为开头的英语单词. eXpl ...
- 模拟赛 Problem 2 不等数列(num.cpp/c/pas)
Problem 2 不等数列(num.cpp/c/pas) [题目描述] 将1到n任意排列,然后在排列的每两个数之间根据他们的大小关系插入“>”和“<”.问在所有排列中,有多少个排列恰好有 ...
随机推荐
- C# 开发XML Web Service与Java开发WebService
一.web service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量 ...
- jQuery 通用表单方法
表单验证一直是一个麻烦的事情,让很多人望而退步,之前想过一个验证的好方法,但是有bug,昨晚请教了juyling.com的王员外,顺利解决. 以下是js代码 function mySubmit ...
- Android程序之全国天气预报查询接口演示
一.项目演示效果如下: 二.使用 聚合数据SDK 注册账号-创建一个新应用(在个人中心页面-数据中心-申请数据)–填入自己的应用–找到分类–天气预报-全国天气预报 下载sdk (由于项目使用的是1点几 ...
- HTML--5 JavaScript
一.JavaScript简介 1.JavaScript是个什么东西? 它是个脚本语言,需要有宿主文件,它的宿主文件是HTML文件. 2.它与Java什么关系? 没有什么直接的联系,Java是Sun公司 ...
- cf--2A
//Accepted 100 KB 92 ms //模拟 #include <cstdio> #include <cstring> #include <iostream& ...
- javascript 构造函数中的属性与原型上属性优先级的比较
备注: 下面这个问题是我前天看书上发现的. 按照我以前的理解, a.rename()这个方法传什么值,结果都会弹出 小a,但我看书上的demo 弹出的是大A.... 我的困惑是: js的构造函数中的 ...
- OBJECT ARX 添加标注样式
////获得当前图形的标注样式表 AcDbDimStyleTable* pDimStyleTbl; acdbHostApplicationServices()->workingDatabase( ...
- Android弱网测试中关于网络检测的一些借鉴方法
Android 平台下提供了一个android.net.ConnectivityManager类来监控当前的网络状态包括wifi.gprs.UMTS等.可以判断当前用户网络到底是WIFI还是移动网络, ...
- UIkit框架之UItextfield
1.继承链:UIcontrol:UIview:UIresponder:NSObject 2.成为第一响应者:[text becomeFirstResponder]; //让该文本成为第一响应者 3. ...
- codeforces round367 div2.C (DP)
题目链接:http://codeforces.com/contest/706/problem/C #include<bits/stdc++.h> using namespace std; ...