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 ...
随机推荐
- mysql打印输出转csv格式
1. mysql打印输出放在input.csv中 2. 执行该文件 <?php $str = file_get_contents("./input.csv"); $str = ...
- SQL必知必会 -------- 聚集函数、分组排序
聚集函数 1.AVG()函数 输入:SELECT AVG(prod_price) AS avg_price FROM Products 输出: 警告:只用于单个列AVG()只能用来确定特定数值列的平均 ...
- FileBuffer-ImageBuffer 模拟PE
这节课的重点是:模拟PE加载过程,按照运行的要求给FileBuffer拉伸放到内存当中,从 FileBuffer 到 ImageBuffer 再到 运行Buffer. PE 加载 过程: 根据si ...
- [POJ2749]Building roads(2-SAT)
Building roads Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 8153 Accepted: 2772 De ...
- 【二分答案】BZOJ2016-Chocolate Eating
[题目大意] n块巧克力,每次吃可以增加ai点快乐,每天早晨睡觉起来快乐值会减半,求如何使d天睡觉前的最小快乐值最大. [思路] 二分每天的最小快乐值,只要没有达到快乐值就继续吃. 不知道为什么了WA ...
- 11.m进制转十进制
Strlen是字符串有多长就是多长,包括所有的元素和\0这个结束符 题目描述 Description 将m进制数n转化成一个十进制数 m<=16 题目保证转换后的十进制数<=100 输入描 ...
- ACM -- 算法小结(八)字符串算法之Manacher算法
字符串算法 -- Manacher算法 首先介绍基础入门知识,以下这部分来着一贴吧,由于是很久之前看的,最近才整理一下,发现没有保存链接,请原创楼主见谅. //首先:大家都知道什么叫回文串吧,这个算法 ...
- [转]ViewPager 详解(三)---PagerTabStrip与PagerTitleStrip添加标题栏的异同
目录(?)[-] 一PagerTitleStrip Class Overview XML布局文件 重写适配器的getPageTitle函数 变量 初始化 重写CharSequence getPag ...
- IndiaHacks 2016 - Online Edition (Div. 1 + Div. 2) C. Bear and Up-Down 暴力
C. Bear and Up-Down 题目连接: http://www.codeforces.com/contest/653/problem/C Description The life goes ...
- SLVA299A : Load Disconnect ( Input to Output Isolation ) for the TPS61040
http://www.ti.com/lit/an/slva299a/slva299a.pdf Many boost converters have an external rectifier diod ...