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 ...
随机推荐
- SPOJ GSS3-Can you answer these queries III-分治+线段树区间合并
Can you answer these queries III SPOJ - GSS3 这道题和洛谷的小白逛公园一样的题目. 传送门: 洛谷 P4513 小白逛公园-区间最大子段和-分治+线段树区间 ...
- Java线程池使用和常用参数(待续)
线程池怎么实现的,核心参数讲一讲? Executors是线程池的工厂类,通过调用它的静态方法如下: Executors.newCachedThreadPool(); Executors.newFixe ...
- Wannafly挑战赛7 C - 小Q与氪金游戏
题目描述 “为世界上所有的美好而战!”小Q同学最近沉迷“稳固3”,为了从最新的蛋池中抽出自己喜欢的角色卡,不惜氪下重金.在这个游戏中,氪一单可以得到x个宝石,而抽一次卡需要花费y个宝石,由于游戏策划十 ...
- hihocoder 1490 Tree Restoration
构造. 从最后一层开始往上构造.最后一层肯定都是叶子结点,距离为2的肯定是同一个父亲,确定好了父亲之后,可以确定上一层每个节点之间的距离,以及上一层每个节点到还未确定的叶子节点之间的距离. #incl ...
- mongodb 32系统安装失败问题
32位系统 在安装完成后 运行mongod --dbpath c:\data\db后,没有如愿以偿出现端口数字27017,出现了如下的报错 ************** D:\GREENT~1\Pow ...
- android studio 可以汉化的 文件 地方
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha 汉化包 百度云盘 下载地址:https://pan.baidu.com/s/1pLjwy ...
- HttpURLConnection与 HttpClient 区别/性能测试对比
HttpClient是个开源框架,封装了访问http的请求头,参数,内容体,响应等等, HttpURLConnection是java的标准类,什么都没封装,用起来太原始,不方便 HttpClient实 ...
- Linux下ip route、ip rule、iptables的关系(转)
1.基础知识 1.1 路由 (Routing) 1.1.1 路由策略 (使用 ip rule 命令操作路由策略数据库) 基于策略的路由比传统路由在功能上更强大,使用更灵活,它使网络管理员不仅能够根据目 ...
- iOS开发 跳转场景的三种方式
iOS开发 跳转场景的三种方式 2012年10月17日, 15:32 假设A跳转到B,三种方法:1.按住ctrl键,拖动A上的控件(比如说UIButton)到B上,弹出菜单,选择Modal.不需要写任 ...
- Apache Thrift使用简介
Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.和其它RPC框架相比,它主要具有如下连个特点: 高性能. 它采用的是二进制序列化,并且用的是长 ...