acwing 23. 矩阵中的路径
习题地址 https://www.acwing.com/problem/content/description/21/
题目描述
请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。
路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。
如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。
注意:
输入的路径不为空;
所有出现的字符均为大写英文字母;
样例
样例
matrix=
[
["A","B","C","E"],
["S","F","C","S"],
["A","D","E","E"]
] str="BCCE" , return "true" str="ASAE" , return "false"
算法1
按照Y老师视频的说就是 典型的暴搜例子
我们按照搜索的模板来定义
1 寻找起始点 (第一个符合条件的字母) ,添加一个同样大小的多维数组 维护该点是否访问过
2 深度搜索(四个方向扩展)
3 设置正确的退出点 不符合条件 坐标越界 字符串长度越界等
4 继续下一轮搜索 记得将访问数组中对应的点恢复原样
class Solution {
public:
bool dfs(vector<vector<char>>& matrix, string str,int idx, vector<vector<char>>& vis, int x, int y)
{
//坐标错误则直接返回
if (x < || y < || x >= matrix.size() || y >= matrix[].size())
return false;
//该点字符与字符串不同 直接返回
if (matrix[x][y] != str[idx])
return false;
//该坐标已经访问 直接返回
if (vis[x ][y] != )
return false;
//该点记录置1
vis[x][y] = ;
//检测是否完全符合str字符串
if (idx == str.length() - )
return true;
//四个方向的遍历 任意一个符合条件则返回成功
if ( dfs(matrix, str, idx + , vis, x + , y))
return true;
if ( dfs(matrix, str, idx + , vis, x - , y))
return true;
if ( dfs(matrix, str, idx + , vis, x, y + ))
return true;
if (dfs(matrix, str, idx + , vis, x, y - ))
return true;
//函数退出的时候记得回复访问数据
vis[x][y] = ;
return false;
}
bool hasPath(vector<vector<char>>& matrix, string str) {
vector<vector<char>> vis = matrix;
for (int i = ; i < vis.size(); i++) {
for (int j = ; j < vis[].size(); j++) {
vis[i][j] = ;
}
}
for(int i = ; i < matrix.size(); i++) {
for (int j = ; j < matrix[].size(); j++) {
if (matrix[i][j] == str[]) {
if (true == dfs(matrix,str,, vis,i,j))
{
return true;
}
}
}
}
return false;
}
};
作者:defddr
链接:https://www.acwing.com/solution/acwing/content/3179/
来源:AcWing
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
acwing 23. 矩阵中的路径的更多相关文章
- 【Java】 剑指offer(11) 矩阵中的路径
本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集 题目 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字 ...
- 《剑指offer》第十二题(矩阵中的路径)
// 面试题:矩阵中的路径 // 题目:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有 // 字符的路径.路径可以从矩阵中任意一格开始,每一步可以在矩阵中向左.右. // 上.下移动 ...
- 【12】(难&精)【DFS】矩阵中的路径
题目 矩阵中的路径 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左.右.上.下移动一格.如果一条路径经过了矩阵的某一 ...
- 剑指 Offer 12. 矩阵中的路径 + 递归 + 深搜 + 字符串问题
剑指 Offer 12. 矩阵中的路径 题目链接 题目类似于迷宫的搜索. 需要注意的是,需要首先判断起始搜索的位置,可能有多个起点,都需要一一尝试. 每轮迭代的时候记得将是否遍历标记数组还原为未遍历的 ...
- 剑指offer:JZ12 矩阵中的路径
JZ12 矩阵中的路径 描述 请设计一个函数,用来判断在一个n乘m的矩阵中是否存在一条包含某长度为len的字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上, ...
- 矩阵中的路径 牛客网 剑指Offer
矩阵中的路径 牛客网 剑指Offer 题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下 ...
- 力扣 - 剑指 Offer 12. 矩阵中的路径
题目 剑指 Offer 12. 矩阵中的路径 思路1(回溯.DFS) 这题可以使用回溯+递归来解决,思路如下: 将二维数组的每一个元素都作为起点进行回溯查找 每次查找的时候,都有四个方向,但是上一个方 ...
- 剑指Offer_12_矩阵中的路径(参考问题:马踏棋盘)
题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵 ...
- 剑指offer(65)矩阵中的路径
题目描述 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩阵中 ...
随机推荐
- FCC---CSS Flexbox: Use the flex-direction Property to Make a Row
Adding display: flex to an element turns it into a flex container. This makes it possible to align a ...
- Python装饰器(Decorators )
http://book.pythontips.com/en/latest/decorators.html 在<Built-in Functions(3.6)>和<Python上下文管 ...
- Redis中的Scan命令的使用
Redis中有一个经典的问题,在巨大的数据量的情况下,做类似于查找符合某种规则的Key的信息,这里就有两种方式,一是keys命令,简单粗暴,由于Redis单线程这一特性,keys命令是以阻塞的方式执行 ...
- javascript随机数发现的一个parseInt函数的问题
前几天想伪造一些数据,用到了随机数,没有自己写,便在网上找了一下,找到了这篇文章:https://www.cnblogs.com/starof/p/4988516.html .之后测试了一下,发现了一 ...
- 《软件安装》VMware 安装 centos8
上期问题回顾 搞技术的同学应该都听过docker,那么请问docker和虚拟机有什么区别呢? 传统的虚拟机架构是:物理机 -> 宿主机操作系统 -> Hypervisor支持 -> ...
- Docker-compose安装和应用
安装 1.为什么要使用docker-compose? 使用 Docker Compose 可以轻松.高效的管理容器,它是一个用于定义和运行多容器 Docker 的应用程序工具 2.其他前置条件需要 ...
- js全局属性/函数
全局函数 eval () isFinite () 检查某个值是否为有穷大的数 isNaN () 检查某个值是否是数字 返回true或fa ...
- 阿里云 centOS系统 配置 node + ngnix
**centOS系统可以直接使用yun命令** 安装node 1.使用git将源码克隆到本地的~/.nvm目录下,并检查最新版本.> yum install git > git clone ...
- 剑指Offer-37.二叉树的深度(C++/Java)
题目: 输入一棵二叉树,求该树的深度.从根结点到叶结点依次经过的结点(含根.叶结点)形成树的一条路径,最长路径的长度为树的深度. 分析: 递归求解左右子树的最大值即可,每遍历到一个结点,深度加1,最后 ...
- 【RTOS】基于V7开发板的最新版uCOS-II V2.92.16程序模板,含MDK和IAR,支持uC/Probe
模板下载: 链接:https://pan.baidu.com/s/10a9Hi0MD14obR_B1LAQEFA 提取码:z76n 1.MDK使用MDK5.26及其以上版本. 2.IAR使用I ...