迷宫寻宝(一)(bfs)
迷宫寻宝(一)
- 描述
-
一个叫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题解:
- num记录钥匙的个数;神搜,搜到钥匙就加上,遇到门就判断,带个回溯;但是不知道对不对,还在判题中;
- bfs代码:
-
#include<stdio.h>
#include<string.h>
#include<queue>
#define mem(x) memset(x,0,sizeof(x))
using namespace std;
char map[][];
int vis[][];
int key[];
int disx[]={,,,-};
int disy[]={,-,,};
int M,N;
struct Node{
int x,y;
};
bool limit(Node a){
if(map[a.x][a.y]>='a'&&map[a.x][a.y]<='e')key[map[a.x][a.y]-'a']--;
if(map[a.x][a.y]=='G')return true;
return false;
}
void bfs(int sx,int sy){
queue<Node>dl;
Node a,b;
vis[sx][sy]=;
a.x=sx;a.y=sy;
dl.push(a);
while(!dl.empty()){
a=dl.front();
dl.pop();
if(limit(a)){
puts("YES");
return ;
}
if(map[a.x][a.y]>='A'&&map[a.x][a.y]<='E'){
if(!key[map[a.x][a.y]-'A'])map[a.x][a.y]='.';
else{
if(dl.empty())break;
dl.push(a);
continue;
}
}
for(int i=;i<;i++){
b.x=a.x+disx[i];
b.y=a.y+disy[i];
if(b.x<||b.y<||b.x>=M||b.y>=N||vis[b.x][b.y]||map[b.x][b.y]=='X')continue;
vis[b.x][b.y]=;
dl.push(b);
}
}
puts("NO");
}
int main(){
while(scanf("%d%d",&M,&N),M|N){
mem(vis);mem(key);
for(int i=;i<M;i++)scanf("%s",map[i]);
int sx,sy;
for(int x=;x<M;x++)for(int y=;y<N;y++){
if(map[x][y]>='a'&&map[x][y]<='e')key[map[x][y]-'a']++;
if(map[x][y]=='S')sx=x,sy=y;
}
bfs(sx,sy);
}
return ;
}
迷宫寻宝(一)(bfs)的更多相关文章
- Problem 2285 迷宫寻宝 (BFS)
题目链接:http://acm.fzu.edu.cn/problem.php?pid=2285 Problem 2285 迷宫寻宝 Accept: 323 Submit: 1247Time Li ...
- NYOJ82 迷宫寻宝(一)【BFS】
迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 一个叫ACM的寻宝者找到了一个藏宝图.它依据藏宝图找到了一个迷宫,这是一个非常特别的迷宫,迷宫里有N个 ...
- nyoj 82 迷宫寻宝(一)
点击打开链接 迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫 ...
- 福州大学第十五届程序设计竞赛_重现赛B题迷宫寻宝
Problem B 迷宫寻宝 Accept: 52 Submit: 183Time Limit: 1000 mSec Memory Limit : 32768 KB Problem De ...
- Unity3D实现立体迷宫寻宝
Unity3D实现立体迷宫寻宝 这个小游戏是一个白痴在一个昏暗的房间走动找到关键得分点,然后通关游戏.入门Unity3D做的第一款游戏,比较无聊,但实现了一般的游戏功能.如,人物控制,碰撞检测,主控制 ...
- POJ.3894 迷宫问题 (BFS+记录路径)
POJ.3894 迷宫问题 (BFS+记录路径) 题意分析 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, ...
- nyist 82迷宫寻宝(一)(BFS)
题目连接:http://acm.nyist.net/JudgeOnline/problem.php?pid=82 此题在基础BFS上加入了门和钥匙,要找齐所有钥匙才能开门,所以要对门特殊处理. 1.先 ...
- Problem 2285 迷宫寻宝
http://acm.fzu.edu.cn/problem.php?pid=2285 Problem Description 洪尼玛今天准备去寻宝,在一个n*n (n行, n列)的迷宫中,存在着一个入 ...
- POJ 3984 迷宫问题(BFS)
迷宫问题 Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, ...
随机推荐
- Android Studido下的应用性能优化总结--布局优化
前言:一个应用的成功=产品设计*性能 ,再此我们不讨论一个应用的设计,那交给我们可爱又可恨的产品经理和UI设计师来决定!所以这里分步骤讨论如何提升一个应用的性能,这里先探讨布局优化问题. 布局优化 避 ...
- zabbix学习入门总结
对于zibbix,我现在的轮廓,是多个agent,一个server,再加上一些可选的proxy. 从通信的角度来看,就是数据流从agents流向server.但是agent跟server数据传送的细节 ...
- Storages and virtual servers
1. IBM Storages: SONAS,V7k,V7ku,SVC,XIV 存储设备都安装了个性化定制的Linux系统,来完成不同的服务,这几台存储设备使用原理都是类似的,以SONAS (Scal ...
- fseek/ftell/rewind/fgetpos/fsetpos函数使用-linux
程序: #include<stdio.h> int main(int argc,char *argv[]) { FILE * stream; fpos_t pos; stream = fo ...
- spark基本概念
Client:客户端进程,负责提交作业到Master. Application:Spark Application的概念和Hadoop MapReduce中的类似,指的是用户编写的Spark应用程序, ...
- asp:UpdatePanel中js失效问题已解决
1.js function textSAll(o) { o.select(); } var dddd_dd = function () { $(":text").on(" ...
- 解决 Boot Camp 虚拟机升级到 Windows 10 后 Parallels Desktop 不能识别的问题
最近几天 Win10 正式版开始推送了,对于喜欢折腾的博主,在第一时间就把 Mac 中 Boot Camp 从 Win7 升级到 Win10,初步体验还不错,等博主用过一段时间之后,再来给大家分享使用 ...
- log4net简单用法
一.NuGet在Server,mvc中添加Common.Logging和common.Logging.Log4Net如下图 二.在Server层创建logger类 <?xml version=& ...
- poj3461Oulipo
Description The French author Georges Perec (1936–1982) once wrote a book, La disparition, without t ...
- Activity 切换 动画
overridePendingTransition的简介 1 Activity的切换动画指的是从一个activity跳转到另外一个activity时的动画. 它包括两个部分:一部分是第一个acti ...