迷宫寻宝(一)

时间限制: 1 Sec  内存限制: 64 MB
提交: 24  解决: 7
[提交][状态][讨论版]

题目描述

一个叫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<queue>
# include<string.h>
using namespace std;
int b[4][2]={0,1,1,0,-1,0,0,-1};//上下左右四个方向
char a1[25][25];
int v[25][25];//标记走过的路
int n,m,k1[6],k2[6],s1,s2,k;
struct node{int x,y;
};
int dfs()
{
k=0;
memset(v,0,sizeof(v));queue<node>s;node p,q; p.x=s1;p.y=s2;s.push(p); v[s1][s2]=1;while(!s.empty()){p=s.front();s.pop(); if(a1[p.x][p.y]=='G')//如果找到宝箱 return 1;for(int i=0;i<4;i++){q.x=p.x+b[i][0];q.y=p.y+b[i][1];if(q.x>=0&&q.x<n&&q.y>=0&&q.y<m&&a1[q.x][q.y]>='a'&&a1[q.x][q.y]<='e'){    k2[a1[q.x][q.y]-'a']++;a1[q.x][q.y]='.';k=1;//找到钥匙 }if(q.x>=0&&q.x<n&&q.y>=0&&q.y<m&&!v[q.x][q.y]&&a1[q.x][q.y]!='X'){if(a1[q.x][q.y]>='A'&&a1[q.x][q.y]<='E'){if(k2[a1[q.x][q.y]-'A']==k1[a1[q.x][q.y]-'A'])//找到的钥匙数与总共的钥匙数的关系 {                    //如果相等这开门; s.push(q);v[q.x][q.y]=1;}}else {s.push(q);v[q.x][q.y]=1;                  }}}   }if(!k)    return -1;  //如果没找到钥匙
else return 0;     //找到钥匙但没找到宝箱 }
int main(){while(~scanf("%d%d",&n,&m)&&m&&n){  getchar();int i,j;memset(k1,0,sizeof(k1));memset(k2,0,sizeof(k2));for(i=0;i<n;i++) {scanf("%s",&a1[i]);for(j=0;j<m;j++)if(a1[i][j]>='a'&&a1[i][j]<='e')k1[a1[i][j]-'a']++;else if(a1[i][j]=='S'){s1=i;s2=j;  }getchar();}while(1)//每次都重新调用函数 {int w=dfs();if(w==1)  {  //如果返回值为1 说明已经找到宝箱 printf("YES\n");break;}else if(w==-1)  // 如果没有找到钥匙并且没有找到 宝箱 则说明不可能成功 {printf("NO\n");break;}}  }return 0;
}
												

迷宫寻宝(一) 搜索相关推荐

  1. 迷宫寻宝(宽度搜索)(C++)

    迷宫寻宝 题目 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,不限时间和步数,当然也没有陷阱,请你判断他能不能顺利的得到宝藏. 输入 多组输入 每组测试数据的第一行包含了两个整数M ...

  2. Qt利用深度优先搜索实现迷宫寻宝

    先看效果: 利用QT搭建迷宫界面 利用单选框来构造迷宫,设置障碍物和宝藏的位置 利用深度优先搜索实现迷宫寻宝,并且在寻找的过程中避开障碍物. 搜索算法在线程中进行 定义方格的属性 enum Signa ...

  3. 《搜索》— NYOJ 82 迷宫寻宝(一)

    迷宫寻宝(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编过号 ...

  4. NYOJ-82迷宫寻宝(门与钥匙经典+搜索)

    迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编过号的门 ...

  5. 深度优先搜索之迷宫寻宝

    迷宫寻宝 有一个N行M列由单元格组成的迷宫.迷宫中埋藏有宝物,每一个单元格可能为空地,为障碍物,为宝藏.现在请你写一个程序求从起点到宝藏的最短步数. 输入格式:第一行输入N M表示地图的行和列.后面N ...

  6. NYOJ 82:迷宫寻宝(一)(BFS)

    迷宫寻宝(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编过号 ...

  7. nyoj82(迷宫寻宝)

    nyoj82(迷宫寻宝) 迷宫寻宝(一) 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个 ...

  8. nyoj 81 迷宫寻宝

    迷宫寻宝(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编 ...

  9. nyoj82 迷宫寻宝(一) (bfs)

    迷宫寻宝(一) 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 一个叫ACM的寻宝者找到了一个藏宝图,它根据藏宝图找到了一个迷宫,这是一个很特别的迷宫,迷宫里有N个编过号的门 ...

最新文章

  1. Redis源码解析——前言
  2. 多个线程为了同个资源打起架来了,该如何让他们安分?
  3. observable_在Spring MVC流中使用rx-java Observable
  4. tomcat架构分析 (Session管理)【转】
  5. HDU - 5592 ZYBs Premutation(线段树,逆序对)
  6. 【DOS】对指定目录下的指定文件类型进行打包
  7. CreateProcess error = 2,系统找不到指定的文件
  8. 羡慕,浙江大学的双 11 快递,全部由物流机器人配送
  9. v-html解析的相对地址img 显示不出来_还不懂java类加载机制的,建议看下这份阿里技术官总结的笔记!...
  10. 503小组第三章编程作业
  11. SQLserver2012 修改数据库架构
  12. 二十四节气之夏至养生篇
  13. Counting Stars HDU - 6184
  14. Power BI 数据分析基础
  15. web服务器软件有哪些?带你快速了解
  16. Parallel Scavenge垃圾回收器线上调优实战
  17. 两种方法实现卸载apk应用程序
  18. 使用pytorch搭建AlexNet网络模型
  19. 中兴跳楼程序员妻子:他们就这样把我老公逼死了
  20. 学习笔记-DataFrame求平均数,求众数

热门文章

  1. 深信服上网行为管理开启snmp_深信服上网行为管理部署方式及功能实现配置说明....
  2. MYSQL 存储过程的简单使用
  3. Java程序编写 • 【第9章 程序:用定义类实现,吃货联盟订餐系统,新增商家和评论功能】
  4. 冬季黄山(2~3 日游)攻略
  5. 计算机发展史—从织布机到IBM!
  6. python按回车_python中回车键
  7. c语言程序中要用到阶乘,C程序使用递归求数字的阶乘
  8. 概率论与数理统计Chapter1——先导知识1
  9. 阿里云负载均衡【SLB】使用实践方案
  10. 彼岸花开开彼岸,奈何桥前怎奈何