HDU 4528 BFS 小明系列故事——捉迷藏
原题直通车:HDU 4528 小明系列故事——捉迷藏
分析: 标记时加两种状态就行.
代码:
#include<iostream>
#include<cstring>
#include<queue>
#include<cstdio>
using namespace std; const int maxn=101;
char f[maxn][maxn];
int dx[]={0,0,-1,1};
int dy[]={1,-1,0,0};
bool vis[maxn][maxn][2][2];
int n,m,k,ei,ej,di,dj,si,sj;
struct node{
int x,y,time,p,q;
}rt,ne;
void work(node &rt){
bool u;
if(!rt.p&&rt.x==ei){
int a=min(rt.y,ej), b=max(rt.y,ej);
u=false;
for(int i=a+1;i<b;++i)
if(f[ei][i]!='.') u=true;
if(!u)rt.p=1;
}
if(!rt.p&&rt.y==ej){
int a=min(rt.x,ei), b=max(rt.x,ei);
u=false;
for(int i=a+1;i<b;++i)
if(f[i][ej]!='.') u=true;
if(!u)rt.p=1;
}
if(!rt.q&&rt.x==di){
int a=min(rt.y,dj), b=max(rt.y,dj);
u=false;
for(int i=a+1;i<b;++i)
if(f[di][i]!='.')u=true;
if(!u)rt.q=1;
}
if(!rt.q&&rt.y==dj){
int a=min(rt.x,di), b=max(rt.x,di);
u=false;
for(int i=a+1;i<b;++i)
if(f[i][dj]!='.') u=true;
if(!u)rt.q=1;
}
}
int BFS(){
queue<node>M;
rt.x=si, rt.y=sj, rt.time=0, rt.p=0, rt.q=0;
vis[si][sj][0][0]=true;
M.push(rt);
while(!M.empty()){
rt=M.front(); M.pop();
work(rt);
if(rt.p&&rt.q) return rt.time;
for(int i=0;i<4;++i){
ne=rt; ne.x+=dx[i]; ne.y+=dy[i]; ne.time+=1;
if(ne.x<0||ne.x>=n||ne.y<0||ne.y>=m||ne.time>k||f[ne.x][ne.y]!='.') continue;
if(!vis[ne.x][ne.y][ne.p][ne.q]){
M.push(ne);
vis[ne.x][ne.y][ne.p][ne.q]=true;
}
}
}
return -1;
}
int main(){
int T,i,j,t,u,cas=1; scanf("%d",&T);
while(T--){
scanf("%d%d%d",&n,&m,&k);
for(i=0;i<n;++i){
scanf("%s",f[i]);
for(j=0;j<m;++j){
if(f[i][j]=='S') si=i, sj=j,f[i][j]='.';
if(f[i][j]=='E') ei=i, ej=j;
if(f[i][j]=='D') di=i, dj=j;
for(t=0;t<2;++t)
for(u=0;u<2;++u)
vis[i][j][t][u]=false;
}
}
printf("Case %d:\n%d\n",cas++,BFS());
}
return 0;
}
HDU 4528 BFS 小明系列故事——捉迷藏的更多相关文章
- C - 小明系列故事――捉迷藏 HDU - 4528 bfs +状压 旅游-- 最短路+状压
C - 小明系列故事――捉迷藏 HDU - 4528 这个题目看了一下题解,感觉没有很难,应该是可以自己敲出来的,感觉自己好蠢... 这个是一个bfs 用bfs就很好写了,首先可以预处理出大明和二明能 ...
- HDU 4828 小明系列故事——捉迷藏
漂亮妹子点击就送:http://acm.hdu.edu.cn/showproblem.php?pid=4528 Time Limit: 500/200 MS (Java/Others) Memo ...
- hdu4528 小明系列故事——捉迷藏
Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others) Total Submission(s ...
- HDU 4528 小明系列故事――捉迷藏
广搜. 根据题意,可以知道状态总共有$4*n*m$种.每一个位置四种状态:两个都没有发现:发现$E$没发现$D$:发现$D$没发现$E$:两个都发现. 每次移动的花费都是$1$,队列里面状态的费用是单 ...
- HDU-4528 小明系列故事——捉迷藏 BFS模拟
题意:链接 分析:每一个D或者是E点往四面延伸,并且赋一个特殊的值,能看到D点的点赋值为1,能看到E点的点赋值为1000,这是因为最多100步,因此最后可以根据除以1000和对1000取模来得出某个状 ...
- hdu4528 小明系列故事——捉迷藏(记录状态的BFS)题解
思路: 一道BFS题,和以前的BFS有点不同,这里的vis数组需要记录每次走时的状态,所以开了3维,只对该状态下的vis修改. 注意坑点:S的位置是可以走的 代码: #include<queue ...
- hdu 4506 小明系列故事——师兄帮帮忙【幂取模乱搞】
链接: http://acm.hdu.edu.cn/showproblem.php?pid=4506 http://acm.hust.edu.cn/vjudge/contest/view.action ...
- hdu 4542 小明系列故事——未知剩余系
小明系列故事——未知剩余系 题意:操作0表示某数有n个约数,操作1为某数有n个非约数:n <= 47777,若是存在小于2^62的数符合,则输出该数,否则若是不存在输出Illegal,若是大于2 ...
- HDU 4511 小明系列故事——女友的考验 (AC自动机+DP)
小明系列故事——女友的考验 Time Limit: 500/200 MS (Java/Others) Memory Limit: 65535/32768 K (Java/Others)Total ...
随机推荐
- ref:使用Dezender对zend加密后的php文件进行解密
ref:http://www.cnblogs.com/88223100/ 使用Dezender对zend加密后的php文件进行解密 在开发中需要修改一些php文件,部分是通过zend加密的,记事本 ...
- pt--适配方案
原文地址:一种粗暴快速的Android全屏幕适配方案
- 关于Hibernate中的临时态, 持久态, 游离态
三态的基本概念: 1, 临时状态(Transient):也叫自由态,只存在于内存中,而在数据库中没有相应数据.用new创建的对象,它没有持久化,没有处于Session中,处于此状态的对象叫临时对象: ...
- oracle charset
select userenv('language') from dual; USERENV('LANGUAGE') ------------------------------------------ ...
- 深入理解javascript作用域系列第五篇
前面的话 对于执行环境(execution context)和作用域(scope)并不容易区分,甚至很多人认为它们就是一回事,只是高程和犀牛书关于作用域的两种不同翻译而已.但实际上,它们并不相同,却相 ...
- FastReport.Net使用:[38]关系的使用
打印所有成绩 1. 数据源准备 接下来我们需要打印学生成绩,而成绩表中无姓名,我们通过建立Realtion关系来打印数据. 2. 创建Relation关系 在数据视图上的动作下拉菜单中选择“新建关系” ...
- 【BZOJ 4027】 4027: [HEOI2015]兔子与樱花 (贪心)
4027: [HEOI2015]兔子与樱花 Description 很久很久之前,森林里住着一群兔子.有一天,兔子们突然决定要去看樱花.兔子们所在森林里的樱花树很特殊.樱花树由n个树枝分叉点组成,编号 ...
- BZOJ1084 SCOI2005最大子矩阵
考虑DP f[i][j][k]表示一行到i一行到j共取k块最大值,类似于最长公共子序列n^2那种 注意相等时可以一起拿 By:大奕哥 #include<bits/stdc++.h> usi ...
- Problem B: 深入浅出学算法003-计算复杂度
Description 算法复杂度一般分为:时间复杂度.空间复杂度.编程复杂度. 这三个复杂度本身是矛盾体,不能一味地追求降低某一复杂度,否则会带来其他复杂度的增加.在权衡各方面的情况下,降低时间复杂 ...
- Buck converter uses low-side PWM IC
The most common switching-power topology is a buck converter, which efficiently transforms high volt ...