分析:  这个题其实不难,就是在常规的BFS上多了一个BFS,即两个BFS而已!使用一个for循环即可求出来!以前做过很多BFS的题,这道题其实和那些都差不多,就是在数据上需要自己做点功夫,将字符串的地图改变为整数型的地图即可!


思路:1.首先输入地图,然后设立两个int型的起点和终点数组用来存起点和终点;

                 同时在字符串的地图中,如果此处可走,在对应的整数型的地图中标记为1,不能走的地方标记为0;

            2.由于题目要求:如果找不到钥匙或者或者找到了钥匙但是不能把钥匙给DBZ的话,同样视为不成功,即输出“DBZ cheat us”;

            3.基于第二点,可以设立一个标记,在所写的for循环中,只要有一次ans[i]==0,那么表明失败!

            4.这个就看自己的想法了,可以使用数组写队列,也可以使用C++标准模板库写队列,当然我觉得后者更简单咯!

            5.剩下的就是细节方面了,这个多想想应该就没问题了!

代码如下:

#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
using namespace std;
char Map[520][520];
int map[520][520];
int n,m,sx[2],sy[2],dx[2],dy[2],ans[2];
int xx[4]= {1,0,-1,0};
int yy[4]= {0,1,0,-1};
bool vis[520][520];
struct node
{int x,y,ti;
};
bool bfs()
{for(int ss=0; ss<2; ss++){memset(vis,false,sizeof(vis));vis[sx[ss]][sy[ss]]=true;queue<node>Q;node now;now.x=sx[ss];now.y=sy[ss];now.ti=ans[ss];Q.push(now);while(!Q.empty()){node te=Q.front();Q.pop();if(te.x==dx[ss]&&te.y==dy[ss]){ans[ss]=te.ti;break;//cout<<"eee--->"<<ans[ss]<<endl;}for(int i=0; i<4; i++){int X=xx[i]+te.x;int Y=yy[i]+te.y;if(map[X][Y]&&!vis[X][Y]&&X>=0&&X<n&&Y>=0&&Y<m){vis[X][Y]=true;node num;num.x=X;num.y=Y;num.ti=te.ti+1;Q.push(num);}}}if(!ans[ss])return false;}return true;
}
int main()
{while(cin>>n>>m){ans[0]=ans[1]=0;getchar();memset(map,1,sizeof(map));for(int i=0; i<n; i++){for(int j=0; j<m; j++){cin>>Map[i][j];if(Map[i][j]=='.')map[i][j]=1;if(Map[i][j]=='*')map[i][j]=0;if(Map[i][j]=='S'){sx[0]=i;sy[0]=j;}if(Map[i][j]=='X'){dx[0]=i;dy[0]=j;sx[1]=i;sy[1]=j;}if(Map[i][j]=='E'){dx[1]=i;dy[1]=j;}}getchar();}if(bfs())cout<<ans[0]+ans[1]<<endl;elsecout<<"DBZ Cheat Us"<<endl;}return 0;
}

Description

古有富可敌国万三千,今有富可敌球DBZ。话说DBZ有一辆超级林肯加长,它的车头在都江堰,而车尾却在川大,经过数月之久她终于到达了咱们成都东软学院,引来无数人围观。可粗心的DBZ却不知道将车的钥匙丢在了车的何处,于是富可敌球的他悬赏50000000000万(当然这对于他来说都是小Case ^_^),公开悬赏找钥匙。作为咱东软学院平凡的你,肯定不想错失这一次难得变为高富帅、白富美的机会。若你想拿到奖金,那么你就需要用最快的方式找到钥匙,并且拿给DBZ。

Input

测试数据包含多组。

每组测试数据第一行包含2个数 n ( 1 < = n < = 500 ) , m  ( 1 < = m < = n ) ,代表车的长和宽。

接下来包含n行,每行m个元素( 其中 '.' 代表可以通过的路径, 'X' 代表钥匙所在地, '*'代表障碍物, 'E' 代表DBZ锁在地, 'S'代表你所在的位置。 每次你只能上下左右进行移动。

Output

输出仅包含一行,即把钥匙交给DBZ的最小时间,如果无法成功找到钥匙或找到钥匙无法成功交给DBZ,则输出“DBZ Cheat Us"(没有引号)。

Sample Input

4 4S.*...X.E.......4 4S.*..*X..***E...

Sample Output

6DBZ Cheat Us

Problem -B DBZ的钥匙相关推荐

  1. Problem - 6111迷宫出逃

    Problem Description 小明又一次陷入了大魔王的迷宫,在无人机的帮忙下,小明获得了整个迷宫的草图.不同于一般的迷宫,魔王在迷宫里安置了机关,一旦触碰,那么四个方向所在的格子,将翻转其可 ...

  2. 钥匙计数之一(HDU-1483)

    Problem Description 一把锁匙有N个槽,槽深为1,2,3,4.每锁匙至少有3个不同的深度且至少有1对相连的槽其深度之差为3.求这样的锁匙的总数. Input 本题无输入 Output ...

  3. Codeforces 776D The Door Problem

    题目链接:http://codeforces.com/contest/776/problem/D 把每一个钥匙拆成两个点${x,x+m}$,分别表示选不选这把钥匙. 我们知道一扇门一定对应了两把钥匙. ...

  4. HDU1480 钥匙计数之二【递推】

    钥匙计数之二 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Sub ...

  5. P8339-[AHOI2022]钥匙【虚树,扫描线】

    正题 题目连接:https://www.luogu.com.cn/problem/P8339 题目大意 给出nnn个点的一棵树,每个点有钥匙或者宝箱,有不同的颜色. mmm次询问,从xxx走到yyy, ...

  6. 《DSP using MATLAB》Problem 8.22

    时光飞逝,亲朋会一个一个离我们远去,孤独漂泊一阵子后,我们自己也要离开, 代码: %% -------------------------------------------------------- ...

  7. linux下yum错误:[Errno 14] problem making ssl connection Trying other mirror.

    所有的base 都要取消注释 mirrorlist 加上注释 另外所有的enable都要设为零 目录 今天是要yum命令安装EPEL仓库后 yum install epel-release 突然发现y ...

  8. A + B Problem

    1001: A + B Problem Description 计算 A + B. Input 多组测试数据,每组测试数据占一行,包括2个整数. Output 在一行中输出结果. Sample Inp ...

  9. Error:(49, 1) A problem occurred evaluating project ':guideview'. Could not read script 'https://r

    出现问题如下: Error:(49, 1) A problem occurred evaluating project ':guideview'. > Could not read script ...

最新文章

  1. barmanager 不显示_广州13.3寸广告液晶显示屏品牌排行榜
  2. 中国航信官笔试计算机基础,中国航信笔试题目
  3. [YTU]_2907 (类重载实现矩阵加法)
  4. Pythont通过request以及BeautifulSoup爬取几千条情话
  5. Linux RedHat下安装eclipse-standard-kepler-SR1-linux-gtk.tar.gz
  6. gradle spring_使用Gradle的简单Spring MVC Web应用程序
  7. Windows Phone 实用开发技巧(3):输入框自动聚焦并打开SIP
  8. 学计算机的想当警察去一线,想当警察但又怕收入不高,我到底该选择梦想还是现实?...
  9. (转)Python 面向对象编程(一)
  10. 话说模式匹配(1) 什么是模式?
  11. render iview tab select的添加和input的添加
  12. Java高并发编程实战4,synchronized与Lock底层原理
  13. HealthKit Swift 教程: 开始
  14. 心情札记 --- 人活着是为了天天开心快乐, 去憧憬和实现一切美好的事物
  15. 集五福招数都在这了,2021 支付宝集五福全攻略
  16. 抖音如何热门,发布不会提示重复
  17. 0. Office Web Apps简介
  18. Spring MVC标签mvc:resources/小结
  19. matlab yticklable,Matlab绘制XTickLabel有效字符串(Matlab Plot XTickLabel valid strings)
  20. arcgis10.2安装lisense后无法启动的问题

热门文章

  1. 多条件模糊分页查询(angular+primeng+springboot)
  2. 用matlab处理表格,matlab删除excel表格数据-如何用matlab处理多个excel表格中的数据...
  3. 如何策划设计作品 设计的本质 所谓设计
  4. R语言使用lm函数构建简单线性回归模型(建立线性回归模型)、拟合回归直线、使用attributes函数查看线性回归模型的属性信息、获取模型拟合对应的残差值residuals
  5. Jquery如何去掉复选框的勾
  6. 在字符串中输入回车换行或其它特殊字符
  7. c语言浮点数如何精确计算,浮点数精确运算的分析和解决办法
  8. 新手学习嵌入式开发要学什么
  9. 使用Java语言打印一个爱心图案
  10. 2019年小程序发展优势