【题目链接: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. poj 2362

    回溯加剪枝 #include <cstdio> #include <cstdlib> #include <cmath> #include <map> # ...

  2. POJ3176Cow Bowling

    http://poj.org/problem?id=3176 题意:就是一个数塔的问题,属于最简单的动态规划题了吧,数塔从上到下只能找它下面的和它下面的右边的那一个想加,加到最后一行,看加哪个数可以保 ...

  3. linux入门教程(四) 初步进入linux世界

    [Linux 系统启动过程] Linux的启动其实和windows的启动过程很类似,不过windows我们是无法看到启动信息的,而linux启动时我们会看到许多启动信息,例如某个服务是否启动. Lin ...

  4. [@Controller]3 详解@CookieValue,@PathVariable,@RequestBody,@RequestHeader,@RequestParam

    [@Controller]3 详解@CookieValue,@PathVariable,@RequestBody,@RequestHeader,@RequestParam 转载:http://blog ...

  5. [iOS]iPhone利用<极光推送>实现远程推送

    准备: 1. 一个Xcode工程 2. 开发者账号 3. 真机 (重要,模拟器无法进行远程推送,因为模拟器没有UDID) 第一步:绑定工程的Bundle Identifer 首先当然要登录https: ...

  6. thrift总结

    定义: Apache Thrift是一个facebook建立的RPC框架,现在是一个Apache的顶级项目.Thrift允许通过一个跨语言的定义文件的方式定义数据类型和服务接口,[这个文件]作为[RP ...

  7. 【Spring】Redis的两个典型应用场景--good

    原创 BOOT Redis简介 Redis是目前业界使用最广泛的内存数据存储.相比memcached,Redis支持更丰富的数据结构,例如hashes, lists, sets等,同时支持数据持久化. ...

  8. 修改tabbarcontroller选中图片及选中颜色

    1.修改选中图片: UITabBarItem* item = [self.tabBarController.tabBar.items objectAtIndex:1];   //从0开始 item.s ...

  9. 从Uboot到Linux技术内幕

    1. 引言 在专用的嵌入式板子运行 GNU/Linux 系统已经变得越来越流行.一个嵌入式 Linux 系统从软件的角度看通常可以分为四个层次: 1. 引导加载程序.包括固化在固件(firmware) ...

  10. SGU 441 Set Division(矩阵快速幂)

    题目链接:http://acm.sgu.ru/status.php 题意:将n个有区别的球放到m个无区别的盒子里,盒子不能为空.不同的方案数. 思路:设f[i][j]表示将前i个球放到j个盒子里,那么 ...