AcWing 1112. 迷宫

博客介绍了AcWing上的一道迷宫问题,探讨了如何使用深度优先搜索(DFS)策略解决该问题。内容包括题意解释,分析难点,提供解决方案以及代码实现。在解决问题的过程中,博主分享了初次尝试时遇到的TLE(超时)问题,并指出该题的DFS搜索不需要回溯。通过对比不同的搜索树形态,进一步阐述了此题DFS策略的特殊之处。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目链接

题意

给一个n*n的二维矩阵,矩阵中只有’.‘和’#‘这两种状态,’.‘表示可以走,’#‘是障碍,给出起点和终点,只能上下左右走(四连通),还需要注意两点:1.起点有可能就是终点 2.起点和终点都有可能是’#’

分析

题目是经典的dfs题,就判断是否到了终点没,没到终点就一直尝试往四个方向搜

解决方案

1.初始化数据,输入矩阵大小、初始化状态数组、输入起点终点坐标
2.先判断起点和终点是不是’#’,然后再判断是否为同一坐标
3.执行dfs,一直搜,如果有就标记答案变量,没有就不做标记

踩坑

我第一次做这题就TLE,不知道为什么,后来才知道原来这题不需要回溯的。。。

一开始的写法:

st[a][b] = 1;
dfs(a, b);
st[a][b] = 0;  

更改后的写法:

st[a][b] = 1;
dfs(a, b);

这种类型的搜索是不用回溯的,因为多种状态可以同时更新,搜索数是这样的

在这里插入图片描述
而需要回溯的搜索树是这样的

在这里插入图片描述
以上的搜索树对应的是Leetcode79题这种类型的搜索树,每当找到符合条件的字符就更新状态,遇到不符合条件的字符就回溯到之前的节点,并恢复现场

代码

#include <iostream>
#include <cstring>

using namespace std
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值