【题目链接:NYOJ-82

#include<iostream>
#include<cstring>
using namespace std;
struct node{
int x1;
int y1;
int num;
}arry[];
const int MAXN = ;
char Map[MAXN][MAXN]; int ac;
int havekey[];
int findkey[]; void check(); void dfs(int x,int y){
if(Map[x][y] != 'X'){
switch(Map[x][y]){
case 'a':
case 'b':
case 'c':
case 'd':
case 'e':
findkey[Map[x][y] - 'a']++;
break;
case 'A':
case 'B':
case 'C':
case 'D':
case 'E':
arry[Map[x][y] - 'A'].x1 = x;
arry[Map[x][y] - 'A'].y1 = y;
arry[Map[x][y] - 'A'].num++;
return;
case 'G':
ac = true;
return;
}
Map[x][y] = 'X'; //标记已经走过
dfs(x - ,y);
dfs(x + ,y);
dfs(x,y - );
dfs(x,y + );
check();
}
}
void check(){
for(int i = ;i < ;i++){
if(arry[i].num){
if(findkey[i] == havekey[i]){
Map[arry[i].x1][arry[i].y1] = 'X';
dfs(arry[i].x1 + ,arry[i].y1);
dfs(arry[i].x1 - ,arry[i].y1);
dfs(arry[i].x1,arry[i].y1 + );
dfs(arry[i].x1,arry[i].y1 - );
}
}
}
}
int main(){
int m,n;
while((cin >> m >> n) && (m || n)){
memset(havekey,,sizeof(havekey));
memset(findkey,,sizeof(findkey));
memset(arry,,sizeof(arry));
memset(Map,'X',sizeof(Map));//初始边界,否则递归搜索时,会越界空指针
ac = ; int a1,b1; for(int i = ;i <= m;i++){
for(int j = ;j <= n;j++){
cin >> Map[i][j];
if(Map[i][j] == 'S')
a1 = i,b1 = j;
else if(Map[i][j] >= 'a' && Map[i][j] <= 'e')//将其保存至数组
havekey[Map[i][j] - 'a']++;
}
}
dfs(a1,b1);
if(ac){
cout << "YES" << endl;
}else cout << "NO" << endl;
}
return ;
}
//4 4
//S.X.
//a.X.
//..XG
//....
//3 4
//S.Xa
//.aXB
//b.AG
//0 0

【DFS】NYOJ-82 迷宫寻宝(一)-条件迷宫问题的更多相关文章

  1. nyoj 82 迷宫寻宝(一)

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

  2. 福州大学第十五届程序设计竞赛_重现赛B题迷宫寻宝

    Problem B 迷宫寻宝 Accept: 52    Submit: 183Time Limit: 1000 mSec    Memory Limit : 32768 KB  Problem De ...

  3. Unity3D实现立体迷宫寻宝

    Unity3D实现立体迷宫寻宝 这个小游戏是一个白痴在一个昏暗的房间走动找到关键得分点,然后通关游戏.入门Unity3D做的第一款游戏,比较无聊,但实现了一般的游戏功能.如,人物控制,碰撞检测,主控制 ...

  4. 迷宫寻宝(一)(bfs)

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

  5. Problem 2285 迷宫寻宝 (BFS)

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=2285 Problem 2285 迷宫寻宝 Accept: 323    Submit: 1247Time Li ...

  6. NYOJ82 迷宫寻宝(一)【BFS】

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

  7. nyoj 82 迷宫寻宝(二)

    http://acm.nyist.net/JudgeOnline/problem.php?pid=83 题目解法主要在于判断两线段是否相交,思路是穷举所有地图四周的点,其中每一个边界上的点和终点构成一 ...

  8. ZOJ 2110 Tempter of the Bone(条件迷宫DFS,HDU1010)

    题意  一仅仅狗要逃离迷宫  能够往上下左右4个方向走  每走一步耗时1s  每一个格子仅仅能走一次且迷宫的门仅仅在t时刻打开一次  问狗是否有可能逃离这个迷宫 直接DFS  直道找到满足条件的路径 ...

  9. nyist 82迷宫寻宝(一)(BFS)

    题目连接:http://acm.nyist.net/JudgeOnline/problem.php?pid=82 此题在基础BFS上加入了门和钥匙,要找齐所有钥匙才能开门,所以要对门特殊处理. 1.先 ...

随机推荐

  1. Java中super的用法并与this的区别(转载)

    一.子类中如果需要调用父类中的构造函数,则需要使用super(),且必须在构造函数中的第一行 public class Demo1 { public static void main(String[] ...

  2. CentOS下安装Redmine 2.5.2

    Redmine是用Ruby开发的基于web的项目管理软件,所以先要下载安装Ruby,再下载对 Ruby组件进行打包的 Ruby 打包系统RubyGems. 第一步:下载必要的软件 1.依赖包安装 # ...

  3. 暑假集训单切赛第一场 POJ 2309 BST(找规律的题)

    题意:给出一棵二分搜索树,再给一个节点编号n,求以这个节点为根节点的子树叶子节点的最大值与最小值. 首先求n所在的层数,他的层数就是他的因子中2的个数(规律). n的左右各有num=2^i-1个数.最 ...

  4. Class

    1. No const constructor Unlike other member functions, constructors may not be declared as const . W ...

  5. POJ2632Crashing Robots

    做模拟题做的我直接睡着了,题并不难,就是一个细心的问题,有一些细节问题注意了就差不多了,代码写的精美的一般找错误也好找一些,应该学着些好看的代码 #include<cstdio> #inc ...

  6. SUDT2177体检

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=2177 题目描述 大家都知道,新生入学的前几周要 ...

  7. hdu 4578 Transformation 线段树

    没什么说的裸线段树,注意细节就好了!!! 代码如下: #include<iostream> #include<stdio.h> #include<algorithm> ...

  8. 【转】Cygwin访问Windows驱动器

    From:http://www.cygwin.cn/site/info/show.php?IID=1000 由于自己的项目需要使用Linux内核,所以自己在windows下安装了一个Linux虚拟机! ...

  9. jackson基于注解的简单使用

    Jackson提供了一系列注解,方便对JSON序列化和反序列化进行控制,下面介绍一些常用的注解. 1.@JsonIgnore 此注解用于属性上,作用是进行JSON操作时忽略该属性. 2.@JsonFo ...

  10. lintcode :Partition List 链表划分

    题目: 链表划分 给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前. 你应该保留两部分内链表节点原有的相对顺序. 样例 给定链表 1->4->3->2-& ...