NYOJ82-迷宫寻宝1

迷宫寻宝(一)

时间限制: 1000  ms  |  内存限制: 65535  KB

难度: 4

描述

一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编过号的门(N<=5),它们分别被编号为A,B,C,D,E.为了找到宝藏,ACM必须打开门,但是,开门之前必须在迷宫里找到这个打开这个门所需的所有钥匙(每个门都至少有一把钥匙),例如:现在A门有三把钥匙,ACM就必须找全三把钥匙才能打开A门。现在请你编写一个程序来告诉ACM,他能不能顺利的得到宝藏。

输入

输入可能会有多组测试数据(不超过10组)。

每组测试数据的第一行包含了两个整数M,N(1<N,M<20),分别代表了迷宫的行和列。接下来的M每行有N个字符,描述了迷宫的布局。其中每个字符的含义如下:

.表示可以走的路

S:表示ACM的出发点

G表示宝藏的位置

X表示这里有墙,ACM无法进入或者穿过。

A,B,C,D,E表示这里是门,a,b,c,d,e表示对应大写字母的门上的钥匙。

注意ACM只能在迷宫里向上下左右四个方向移动。

最后,输入0 0表示输入结束。

输出
每行输出一个YES表示ACM能找到宝藏,输出NO表示ACM找不到宝藏。
样例输入

4 4 S.X.a.X. ..XG .... 3 4S.Xa.aXB b.AG 0 0

样例输出

YES NO



题意就是 给你个图大写字母表示门 小写字母表示对应的钥匙 必须要把对应门所有钥匙集齐后 才能开门
S是起点 G是终点 问能否抵达终点

注意这道题难点其实就是搜索 那么搜索到门的时候如何处理呢  我如何知道在搜索到门之前是否能够搜全足够的钥匙呢
那么我们不如循环广搜 只要本次BFS搜到钥匙就继续广搜  前面的BFS先搜到钥匙 后面的去匹配
把能搜的钥匙搜齐全了 在去破门
如果门中有钥匙 就再搜索 直到有结果
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#include<iostream>
using namespace std;
char p[21][21];
struct node
{int x,y;
};
int b[5],has[5];// 0 a 1 b 2 c 3 d 4 e  b表示图中钥匙有多少个 has表示最后阶段性搜索能搜到多少个
int dir[][2]={{-1,0},{0,1},{1,0},{0,-1}};
int main()
{int n,m;node s,e;while(cin>>n>>m,n||m){memset(b,0,sizeof(b));memset(has,0,sizeof(has));for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){char c;cin>>c;p[i][j]=c;if(c=='S')s.x=i,s.y=j;else if(islower(c))b[c-'a']++;//记录一共有多少个钥匙}}bool bok[21][21];queue<node>q;q.push(s);bok[s.x][s.y]=1;bool f=0,ss=1;//f 表示有没有结果 ss表示这一次搜索有没有新的钥匙while(ss&&!f){ss=0;while(!q.empty())q.pop();memset(bok,0,sizeof(bok));	q.push(s);bok[s.x][s.y]=1;while(!q.empty()){node a,bb;a= q.front();q.pop();char c = p[a.x][a.y];if(c=='G'){f = 1;puts("YES");break;}else if(c!='S'&&isupper(c)&&has[c+32-'a'] != b[c+32-'a']){continue;//如果这个门的钥匙没集齐 就不能向下执行}for(int i=0;i<4;i++){int tx,ty;tx = a.x+dir[i][0];ty = a.y+dir[i][1];if(tx<=n&&ty<=m&&tx&&ty&&!bok[tx][ty]&&p[tx][ty]!='X'){if(islower(p[tx][ty])){//该点是钥匙 就记录下来 该点置位为'.'has[p[tx][ty]-'a']++;p[tx][ty]='.';ss=1;}	bb.x=tx,bb.y=ty;q.push(bb);bok[tx][ty]=1;			}}}}if(!f)puts("NO");		}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/425751.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[剑指offer][JAVA]面试题第[04]题[二维数中的查找][数组]

【问题描述】[中等] 在一个 n * m 的二维数组中&#xff0c;每一行都按照从左到右递增的顺序排序&#xff0c;每一列都按照从上到下递增的顺序排序。请完成一个函数&#xff0c;输入这样的一个二维数组和一个整数&#xff0c;判断数组中是否含有该整数。示例:现有矩阵 matrix …

微机计算机原理姚向华课后答案,微型计算机操作系统

1. 详尽剖析Mac OS X内部工作原理的具体细节。 2. 揭示Mac OS X及其组件的核心体系结构和实现。 3. 以一种面向实现的方法介绍Mac OS X系统。 4. 透彻解释Mac OS X的众多用户级和内核级IPC机制的工作原理&#xff0c;并且提供足够的知识和示例&#xff0c;可以满足各个层次的读…

node.js Error: connect EMFILE 或者 getaddrinfo ENOTFOUND

Error: getaddrinfo ENOTFOUND] code: ENOTFOUND, errno: ENOTFOUND, syscall: getaddrinfo Error: connect EMFILE 本人在中心服上向800多个ip上发请求&#xff0c;发两次就不行了出现如上报错。 原因是文件句柄不够用了&#xff0c;修改 ulimit 即可&#xff0c;步骤如下&am…

TokenFlow详解

https://github.com/omerbt/TokenFlow/issues/25 https://github.com/omerbt/TokenFlow/issues/31 https://github.com/omerbt/TokenFlow/issues/32 https://github.com/eps696/SDfu register_extended_attention_pnp1. 为所有BasicTransformerBlock layer的attn1重构forward2.…

html:(11):address和code标签

<address>标签&#xff0c;为网页加入地址信息 一般网页中会有一些网站的联系地址信息需要在网页中展示出来&#xff0c;这些联系地址信息如公司的地址就可以<address>标签。也可以定义一个地址&#xff08;比如电子邮件地址&#xff09;、签名或者文档的作者身份…

Java虚拟机(JVM)面试题大集合

Java虚拟机&#xff08;JVM&#xff09;Java内存区域说一下 JVM 的主要组成部分及其作用&#xff1f;说一下 JVM 运行时数据区深拷贝和浅拷贝说一下堆栈的区别&#xff1f;队列和栈是什么&#xff1f;有什么区别&#xff1f;HotSpot虚拟机对象探秘对象的创建为对象分配内存处理…

从html到pug模板,将变量从html-webpack-plugin传递到pug模板

是否可以将变量传递给我之前在html-webpack-plugin中定义的pug-html-loader加载的.pug模板&#xff1f;webpack.config.babel.js...{test: /\.pug$/,use: [{loader: html-loader},{loader: pug-html-loader,options: {self: true}}]}...plugins: [new HtmlWebpackPlugin({chunk…

crossdomain.xml配置不当的利用和解决办法

00x1: 今天在无聊的日站中发现了一个flash小站&#xff0c;点进crossdomain.xml一看&#xff0c;震惊 本屌看到这个*就发觉事情不对 百度一下&#xff0c;这是一个老洞&#xff0c;配置不当能引起各种问题就算能远程加载恶意的swf文件&#xff0c;(swf是flash专用后缀文件常用于…

html:(12):pre和ul-li

使用<pre>标签为你的网页加入大段代码 在上节中介绍加入一行代码的标签为<code>&#xff0c;但是在大多数情况下是需要加入大段代码的&#xff0c;如下图&#xff1a; 怎么办&#xff1f;不会是每一代码都加入一个<code>标签吧&#xff0c;没有这么复杂&…

Sudoku Extension UVALive - 4763

题目地址 https://icpcarchive.ecs.baylor.edu/index.php?optioncom_onlinejudge&Itemid8&pageshow_problem&problem2764就是让你写一个计算数独的程序 这个程序有几个条件 1 输入o处填奇数2 输入e处天偶数3 输入0处随便填4 输入相同小写字符的地方要写相同的数5 …

[Leedcode][JAVA][第394题][字符串解码][栈][类型转换]

【问题描述】[中等] 给定一个经过编码的字符串&#xff0c;返回它解码后的字符串。编码规则为: k[encoded_string]&#xff0c;表示其中方括号内部的 encoded_string 正好重复 k 次。注意 k 保证为正整数。你可以认为输入字符串总是有效的&#xff1b;输入字符串中没有额外的空…

2019昆明计算机会议,计算机 | ACSAC 2019等国际会议信息6条

图形学与多媒体IPTA 2019International Conference on Image Processing Theory, Tools and Applications全文截稿: 2019-06-02开会时间: 2019-11-06会议难度: ★★CCF分类: 无会议地点: Istanbul, Turkey网址&#xff1a;http://www.ipta-conference.com/ipta19/The ninth Int…

html:(13):ol-li和div作用

使用ol&#xff0c;添加图书销售排行榜 如果想在网页中展示有前后顺序的信息列表&#xff0c;怎么办呢&#xff1f;如&#xff0c;当当网上的书籍热卖排行榜&#xff0c;如下图所示。这类信息展示就可以使用<ol>标签来制作有序列表来展示。 语法&#xff1a; <ol>…

粮草先行——Android折叠屏开发技术点番外篇之运行时变更处理原则

上一篇文章中&#xff0c;我们有提到Activity在屏幕尺寸发生变更时的处理方式&#xff0c;总共有两种&#xff1a; 重启APP以适应屏幕改变&#xff1b;手动处理数据&#xff0c;避免APP重启。同样&#xff0c;这两种方式也同时适用于改变屏幕方向、更改系统语言、甚至输入法等等…

Not Equal on a Segment CodeForces - 622C

You are given array a with n integers and m queries. The i-th query is given with three integers li, ri, xi. For the i-th query find any position pi (li ≤ pi ≤ ri) so that api ≠ xi. InputThe first line contains two integers n, m (1 ≤ n, m …

[剑指offer][JAVA]面试题第[05]题[替换空格][StringBuilder/Buffer]

【问题描述】[简单] 请实现一个函数&#xff0c;把字符串 s 中的每个空格替换成"%20"。示例 1&#xff1a;输入&#xff1a;s "We are happy." 输出&#xff1a;"We%20are%20happy."限制&#xff1a;0 < s 的长度 < 10000【解答思路】 …

计算机表格最高分,excel表格里怎样算最高分

在Excel中录入好数据以后进行数据统计&#xff0c;再统计过后多数需要算出最高值得&#xff0c;有些朋友可能不太会求最高值&#xff0c;接下来是学习啦小编为大家带来的excel如何求最高值的方法&#xff0c;欢迎大家来到学习啦学习。excel表格算最高分的方法1&#xff1a;下图…

html:(14):给div命名和table标签

给div命名&#xff0c;使逻辑更加清晰 在上一小节中&#xff0c;我们把一些标签放进<div>里&#xff0c;划分出一个独立的逻辑部分。为了使逻辑更加清晰&#xff0c;我们可以为这一个独立的逻辑部分设置一个名称&#xff0c;用id属性来为<div>提供唯一的名称&…

缓存过期时间的设置

使用 slidingExpiration 时间时&#xff0c;如果再次命中&#xff0c;将延长缓存项目的生命期使用 expireTime 时&#xff0c;无论是否命中&#xff0c;时间到时&#xff0c;都将失效。 转载于:https://www.cnblogs.com/yyj/p/10373882.html

不要62-三种写法

杭州人称那些傻乎乎粘嗒嗒的人为62&#xff08;音&#xff1a;laoer&#xff09;。 杭州交通管理局经常会扩充一些的士车牌照&#xff0c;新近出来一个好消息&#xff0c;以后上牌照&#xff0c;不再含有不吉利的数字了&#xff0c;这样一来&#xff0c;就可以消除个别的士司机…