迷宫寻宝(一) 82
/*迷宫寻宝(一)
时间限制: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 4
S.Xa
.aXB
b.AG
0 0
样例输出
YES
NO
、*
#include <stdio.h>
#include <string.h>
#include <queue>
using namespace std;
int n,m,i,j;
char map[22][22];
int key[5];
struct Node
{int x;int y;
};
queue<Node>QUE;
Node zuobiao,door[5];
void search(int i,int j)
{zuobiao.x = i+1;zuobiao.y = j;if(map[zuobiao.x][zuobiao.y] != 'X'){QUE.push(zuobiao);}zuobiao.x = i-1;zuobiao.y = j;if(map[zuobiao.x][zuobiao.y] != 'X'){QUE.push(zuobiao);}zuobiao.x = i;zuobiao.y = j+1;if(map[zuobiao.x][zuobiao.y] != 'X'){QUE.push(zuobiao);}zuobiao.x = i;zuobiao.y = j-1;if(map[zuobiao.x][zuobiao.y] != 'X'){QUE.push(zuobiao);}
}
int bfs()
{memset(door,0,sizeof(door));while(!QUE.empty()){zuobiao = QUE.front();QUE.pop();i = zuobiao.x;j = zuobiao.y;if(map[i][j] >= 'a' && map[i][j] <= 'e')//找到药匙没找到门{key[map[i][j]-'a']--;if(key[map[i][j] - 'a'] == 0 && door[map[i][j] - 'a'].x !=0 && door[map[i][j] - 'a'].y !=0)//即找到钥匙又找到了门{QUE.push(door[map[i][j]-'a']);}map[i][j] = 'X';search(i,j);}else if(map[i][j]>='A' && map[i][j]<= 'E' && key[map[i][j]-'A'] != 0)//找到了门,没有找到所有药匙{door[map[i][j]-'A'] = zuobiao;}else if(map[i][j] == 'G'){return 1;}else if(map[i][j] != 'X'){map[i][j] = 'X';search(i,j);}}return 0;
}
int main()
{while(scanf("%d%d",&n,&m) && (n||m)){memset(map,'X',sizeof(map));memset(key,0,sizeof(key));for(i=1;i<=n;i++){scanf("%s",&map[i][1]);for(j=1;j<=m;j++){if(map[i][j] == 'S'){zuobiao.x = i;zuobiao.y = j;QUE.push(zuobiao);}else if(map[i][j] >= 'a' && map[i][j] <= 'e'){key[map[i][j] - 'a']++;}}}if(bfs()){printf("YES\n");}else{printf("NO\n");}}return 0;
}
迷宫寻宝(一) 82相关推荐
- NYOJ 82:迷宫寻宝(一)(BFS)
迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编过号 ...
- 《搜索》— NYOJ 82 迷宫寻宝(一)
迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编过号 ...
- 福州大学第十五届程序设计竞赛_重现赛B题迷宫寻宝
Problem B 迷宫寻宝 Accept: 52 Submit: 183 Time Limit: 1000 mSec Memory Limit : 32768 KB Problem D ...
- 迷宫寻宝(自编简单版)
nyoj - 迷宫寻宝(1) 我觉得有点难...我将其改简单一些. 题目描述:与原题基本差不多,但开门条件改一下,每个门只需要一把钥匙即可打开,一把钥匙可以开所有对应的门. 这样就简单很多啦...其实 ...
- nyoj82(迷宫寻宝)
nyoj82(迷宫寻宝) 迷宫寻宝(一) 时间限制: 1000 ms | 内存限制: 65535 KB 难度: 4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个 ...
- 迷宫寻宝(宽度搜索)(C++)
迷宫寻宝 题目 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,不限时间和步数,当然也没有陷阱,请你判断他能不能顺利的得到宝藏. 输入 多组输入 每组测试数据的第一行包含了两个整数M ...
- Qt利用深度优先搜索实现迷宫寻宝
先看效果: 利用QT搭建迷宫界面 利用单选框来构造迷宫,设置障碍物和宝藏的位置 利用深度优先搜索实现迷宫寻宝,并且在寻找的过程中避开障碍物. 搜索算法在线程中进行 定义方格的属性 enum Signa ...
- PARL源码走读——使用策略梯度算法求解迷宫寻宝问题
前不久,百度发布了基于PaddlePaddle的深度强化学习框架PARL.git传送门 作为一个强化学习小白,本人怀着学习的心态,安装并运行了PARL里的quick-start.不体验不知道,一体验吓 ...
- nyoj 81 迷宫寻宝
迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编 ...
最新文章
- 【VMCloud云平台】SCCM(四)域内推送代理
- php 多线程上传,PHP多线程(pthreads)参数传递学习笔记
- 安装 centos 7.x 自定义分区
- 数据竞赛入门-金融风控(贷款违约预测)二、EDA
- nodejs实践录:开篇
- 敏捷开发般若敏捷系列之五:如何推广敏捷(中)(无寿者,回报,破我执)...
- c++vector操作
- 【操作系统】Mac环境配置
- error LNK2005
- Unity 路径点弧线运动
- 关于MATLAB powergui 无法调整为discrete的解决方法
- HTML5 第004篇 <abbr>标签【定义缩写】
- mysql怎么将成绩划分等级_数据库mysql中case如何给成绩划分等级?
- 最新GraphPad Prism Mac直装版(医学绘图软件)v9.4.1
- 渗透学什么?渗透测试中超全的提权思路来了!
- C语言经典练习题(2)——“冒泡排序(Bubble Sort)“
- Windows环境下修改redis默认端口和密码,以及启动方式
- 2018年全国多校算法寒假训练营练习比赛(第五场)The Biggest Water Problem
- 工业智能网关BL110应用之64:如何实现智能楼宇控制BACnet 接入金鸽MQTT云平台
- springboot 页面静态化
热门文章
- 怎么去掉ECShop购物流程中收货人电子邮箱必填
- tomcat配置 详解
- 2022保密教育线上培训考试参考答案 01
- Ctrl c 复制html,一键复制粘贴(用热键代替Ctrl+X、Ctrl+C、Ctrl+V)
- 快速入门 | 篇十四:运动控制器基础轴参数与基础运动控制指令
- Spring Boot优缺点总结
- substr函数功能
- 开发一个 Chrome 浏览器插件,拢共分几步?
- 哈夫曼树 (100分)哈夫曼树
- 三个真话一个假话c语言,推理题-逻辑推理题有A、B、C三个精灵,其中一个只说真话,另外一个只说假 爱问知识人...