【题目描述】

一天Extense在森林里探险的时候不小心走入了一个迷宫,迷宫可以看成是由n * n的格点组成,每个格点只有2种状态,.和#,前者表示可以通行后者表示不能通行。同时当Extense处在某个格点时,他只能移动到东南西北(或者说上下左右)四个方向之一的相邻格点上,Extense想要从点A走到点B,问在不走出迷宫的情况下能不能办到。如果起点或者终点有一个不能通行(为#),则看成无法办到。

【输入】

第1行是测试数据的组数k,后面跟着k组输入。每组测试数据的第1行是一个正整数n (1 ≤ n ≤ 100),表示迷宫的规模是n * n的。接下来是一个n * n的矩阵,矩阵中的元素为.或者#。再接下来一行是4个整数ha, la, hb, lb,描述A处在第ha行, 第la列,B处在第hb行, 第lb列。注意到ha, la, hb, lb全部是从0开始计数的。

【输出】

k行,每行输出对应一个输入。能办到则输出“YES”,否则输出“NO”。

【输入样例】

2
3
.##
..#
#..
0 0 2 2
5
.....
###.#
..#..
###..
...#.
0 0 4 0

【输出样例】

YES
NO

此题采用搜索与回溯,考虑到超时问题而且只需要有一条路径就可以了,所以不需要回溯,关于输出,我用了一个flag检查是否可以到达,刚开始我本来是用dfs的返回值来判断是否可以到达,结果有问题,因为这样的返回值是最后一条路径是否可以到达。刚开始也没有用到b数组,后面发现这样会无限循环,所以添加了一个b[i]数组判断该点是否走过!

#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 100+5
using namespace std;
int k,n,ha,la,hb,lb;
char a[maxn][maxn]={};
int da[5]={0,1,0,-1};
int db[5]={1,0,-1,0};
bool b[maxn][maxn]={};
int flag=0;
bool dfs(int x,int y)
{if(x==hb&&y==lb){flag=1;return true;}for(int i=0;i<4;i++){  int p=x+da[i];int q=y+db[i];if(a[p][q]=='.'&&b[p][q]==0&&p>=0&&q>=0&&p<n&&q<n){b[p][q]=1;dfs(p,q);}}return false;
}
int main()
{cin>>k;while(k!=0){k--;cin>>n;flag=0;memset(a,0,sizeof(a));memset(b,0,sizeof(b));for(int i=0;i<n;i++){for(int j=0;j<n;j++){cin>>a[i][j];}}cin>>ha>>la>>hb>>lb;if(a[ha][la]=='#'||a[hb][lb]=='#'){cout<<"NO"<<endl;continue;}b[ha][la]=1;dfs(ha,la);if(flag==1) cout<<"YES"<<endl;else cout<<"NO"<<endl;}return 0;
}

搜索与回溯 1215:迷宫相关推荐

  1. 搜索与回溯:迷宫问题(migong)

    [题目描述] 设有一个 N*N(2<=N<10)方格的迷宫,入口和出口分别在左上角和右上角.迷宫格子中分别放 0 和 1,0 表示可通,1 表示不能,入口和出口处肯定是 0.迷宫走的规则如 ...

  2. 搜索与回溯典型题目解析

    前排提示,本文收录的题目不是全部,只是抽取一些题目进行解析.因为笔者是在写完所有题之后在写此篇,推导过程中的量的名称可能与参考代码中不一样,还望谅解. 题目链接:信息学奥赛一本通(C++版)在线评测系 ...

  3. Nuist集训队作业:深度优先搜索(回溯算法)

    Nuist集训队第一次作业:深度优先搜索(回溯算法) 引例 深搜基本思想及回溯算法模板 P1706 全排列问题 P1219 八皇后 P1605 迷宫 P1101 单词方阵 小结 引例 国际西洋棋棋手马 ...

  4. 搜索4--noi6264:走出迷宫

    搜索4--noi6264:走出迷宫 一.心得 可以去看看别人的代码,吸收精华 二.题目 6264:走出迷宫 查看 提交 统计 提问 总时间限制:  1000ms 内存限制:  65536kB 描述 当 ...

  5. 【搜索与回溯算法】保卫农场(DFS)

    [搜索与回溯算法]保卫农场 (Standard IO) 时间限制: 1000 ms  空间限制: 262144 KB  具体限制 题目描述: 农夫John的农场里有很多小山丘,他想要在那里布置一些保镖 ...

  6. 104.全排列(深搜)搜索与回溯

    1294 全排列 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Description 给出一个n, 请输出n的所有全排列 输入描述  ...

  7. 数据结构与算法 - 递归回溯(迷宫问题)

    递归的概念 简单说就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码简介 递归的调用机制 递归能解决什么问题 递归需要遵守的重要规则 下面用代码来实现一个迷 ...

  8. LeetCode-题目详解(十一):回溯算法【递归回溯、迭代回溯】【DFS是一个劲往某一个方向搜索;回溯算法建立在DFS基础之上,在搜索过程中,达到结束/裁剪条件后,恢复状态,回溯上一层,再次搜索】

    这里写目录标题 一.概述 1.深度优先遍历(DFS) 和回溯算法区别 2. 何时使用回溯算法 3.回溯算法步骤 4.回溯问题的类型 二.LeetCode案例 39. 组合总和 40. 组合总和II 7 ...

  9. 详解深度优先搜索与回溯

    严格来说,搜索也是一种暴力枚举策略,传统的枚举需要固定for循环的层数,但是这样不能随意增减枚举层数,本文将介绍一种新的利用递归的方式枚举每个可能的选项,如果合法就继续下一个,如果所有选项都不合法就退 ...

最新文章

  1. 在python中可以使用for作为变量名对吗,在Python中使用循环来命名变量
  2. 探寻繁杂定时任务的解决方案:分布式任务调度系统
  3. python 二维数组 长度_Python创建二维数组的正确姿势
  4. HDFS体系架构介绍
  5. python递归求5!_Python | 递归
  6. 用python 画炫酷的图并讲解-Python绘制六种可视化图表详解,三维图最炫酷!你觉得呢?...
  7. 智能优化算法:探路者优化算法-附代码
  8. 拓端tecdat|R语言用相关网络图可视化分析汽车配置和饮酒习惯
  9. php怎么在表格里插图片大小,如何批量插入图片到Word文档表格中并自动排版调整尺寸...
  10. Typora中插入分页符
  11. 新媒体时代,内容为王已经走偏
  12. permissionerror winerror 5 拒绝访问。
  13. 雷神simplest_ffmpeg_player解析(四)
  14. android otg读写文件,Android USB Host在USB设备OTG中读/写文件
  15. 高通不行了? 骁龙835排出前三, 国产处理器崛起, A11当老大
  16. BigDecimal源码分析。
  17. phobos勒索病毒的处理,警惕phobos卷土从来
  18. PS5上传图片失败,游戏无法推送更新,提示服务器出了点问题,HTTP状态码:403
  19. python3中数字类型有哪些_Python3数据类型—列表 | 吴老二
  20. 无人值守污水处理控制系统,西门子200PLC和显控触摸屏编写的智能污水处理控制系

热门文章

  1. Winsock属性、方法介绍
  2. 视频按帧截取 python程序
  3. VR教育让学习变得简单而有趣,VR教育都有哪些优势?
  4. 红外遥控器-IR-linux驱动(基于百问网IMX6ULL_Pro平台)
  5. A2DP音频流在安卓系统中的实现
  6. typora笔记使用base64编码图片
  7. Node.js运行app.js时候报错933
  8. VS+Qt+C++银行排队叫号系统
  9. 南邮-NCTF2022 WRITE UP
  10. Python-Python 2 和Python3