【题目链接: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. windows server 2008 R2 远程连接用户数修改

    设置windows server 2008 R2 远程连接用户数修改,三步搞定 1.运行(win+R)中输入tsconfig.msc 2.双击“限制每个用户只能进行一个会话”,取消这个选项负选框 3. ...

  2. Unity3D脚本中文系列教程(九)

    Unity3D脚本中文系列教程(八) name 对象名称hideFlags 该物体是否被隐藏,保存在场景中或被用户修改继承的函数 GetInstanceID 返回该物体的实例id继承的类函数 oper ...

  3. POJ 2106 Boolean Expressions (布尔表达式求值)

    题意:关于!,&,| 的运算,表达式中V代表true,F代表false. 思路:见代码吧,很详细了. 要注意 !!!F,!(...) 的情况. #include <iostream> ...

  4. POJ 1691 Painting A Board(DFS)

    链接 题意 : 看了好长时间终于看懂题目了,将一个大矩形划分成若干小矩形,告诉你每个小矩形的左上角那个点和右下角那个点的坐标,告诉你这个小矩形要涂的颜色,每个颜色对应一个刷子,问你最少要使用几次刷子. ...

  5. SDUT1061Binomial Showdown(组合数)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1061 题意 : 表示这个题的英文没看懂,就看懂 ...

  6. 华为3C抢购难度

    上周小米2S降价到1299买了一个,今天突然想体验一下抢购红米和3C的难度.万一抢到了,拿到手机市场贵100块钱卖掉,然后可以请女神吃个饭~~~哈哈哈哈! 结果确实不怎么好抢.刚刚试了一下3C: 验证 ...

  7. 李洪强漫谈iOS开发[C语言-007]-语言标准简介

    C语言是介于低级语言和高级语言之间的 一个应用程序 C语言在嵌入式上使用,的确是具有低级语言的特征 直接操作硬件,扫描内存 访问到的都是虚拟内存,一个应用程序占多大内存? 表示最多 可以放多少条指令 ...

  8. JavaWeb项目开发案例精粹-第2章投票系统-005实体层

    1. package com.sanqing.bean; /** * * 投票选项类 * */ public class VoteOption { private int voteOptionID; ...

  9. Hibernate逍遥游记-第13章 映射实体关联关系-001用外键映射一对一(<many-to-one unique="true">、<one-to-one>)

    1. <?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hi ...

  10. python 时间处理(time和datetime介绍)

    python的有关时间的有哪几种呢?今天我们介绍两个:time和datetime time模块提供各种操作时间的函数 datetime模块定义了下面这几个类: datetime.date:表示日期的类 ...