剑指 Offer 12. 矩阵中的路径

思路一:DFS+回溯

DFS 解析:
递归参数: 当前元素在矩阵 board 中的行列索引 i 和 j ,当前目标字符在 word 中的索引 k 。
终止条件:
返回 false : (1) 行或列索引越界 或 (2) 当前矩阵元素与目标字符不同 或 (3) 当前矩阵元素已访问过 ( (3) 可合并至 (2) ) 。
返回 true : k = len(word) - 1 ,即字符串 word 已全部匹配。
递推工作:
标记当前矩阵元素: 将 board[i][j] 修改为 空字符 ‘’ ,代表此元素已访问过,防止之后搜索时重复访问。
搜索下一单元格: 朝当前元素的 上、下、左、右 四个方向开启下层递归,使用 或 连接 (代表只需找到一条可行路径就直接返回,不再做后续 DFS ),并记录结果至 res 。
还原当前矩阵元素: 将 board[i][j] 元素还原至初始值,即 word[k] 。
返回值: 返回布尔量 res ,代表是否搜索到目标字符串。

作者:jyd
链接:https://leetcode-cn.com/problems/ju-zhen-zhong-de-lu-jing-lcof/solution/mian-shi-ti-12-ju-zhen-zhong-de-lu-jing-shen-du-yo/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

class Solution {public:int rows,cols;   //为了减少dfs输入参数的bool exist(vector<vector<char>>& board, string word) {rows=board.size();            //行cols=board[0].size();        //列//两层for循环行列便利找for(int i=0;i<rows;i++){for(int j=0;j<cols;j++){//从某行某列,字符串第0号位置开始遍历寻找,如果找到返回真if(dfs(board,word,i,j,0)) return true;}}return false;}//确定dfs的输入参数,i:行,j:列,k:找到字符串中第几个bool dfs(vector<vector<char>>& board,string word,int i,int j,int k){//首先确定回溯终止条件//当超出矩阵的左右边界或者找到的不是想要的字符返回假if(i>=rows||i<0||j>=cols||j<0||board[i][j]!=word[k]) return false;if(k==word.size()-1) return true;   //当找到的字符是字符串最后一个字符返回真board[i][j] = '\0';     //已经找到过的地方置为0,标记减枝bool res = dfs(board, word, i + 1, j, k + 1) || dfs(board, word, i-1, j , k + 1) ||dfs(board, word, i, j+1, k + 1)|| dfs(board, word, i , j-1, k + 1);board[i][j] = word[k];  //当需要进行回溯时候就返回回撤return res;}};

LeetCode-剑指 Offer 12. 矩阵中的路径相关推荐

  1. 【算法】剑指 Offer 12. 矩阵中的路径

    文章目录 1.概述 2.我的算法 2.1 棋盘 2.1 开始节点 2.2 点没被访问 2.3 点是否在棋盘内 2.4 下一步 2.5 主方法 2.6 核心方法 2.7 测试类 3.leecode1 1 ...

  2. 【附可运行代码】剑指 Offer 12. 矩阵中的路径

    立志用最少的代码做最高效的表达 给定一个 m x n 二维字符网格 board 和一个字符串单词 word .如果 word 存在于网格中,返回 true :否则,返回 false . 单词必须按照字 ...

  3. 剑指 Offer 12. 矩阵中的路径

    这里使用了回溯算法,回溯算法是一种比较特别的DFS,它需要在达到搜索条件后,回溯上一次,继续搜索.普通的DFS适合找路径是否存在的问题,而回溯算法适合解决有几条路径的问题. 这里给出DFS的模板 df ...

  4. 剑指offer——12.矩阵中的路径(不熟)

    题目: 题1:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子.如果一条路径经过了矩 ...

  5. 剑指Offer 12—矩阵中的路径

    题目描述 给定一个 m x n 二维字符网格 board 和一个字符串单词 word .如果 word 存在于网格中,返回 true :否则,返回 false . 单词必须按照字母顺序,通过相邻的单元 ...

  6. 【LeetCode笔记】79. 单词搜索 剑指 Offer 12 矩阵中的路径(Java、dfs)

    文章目录 题目描述 思路 & 代码 更新版 2.0 题目描述 一眼dfs,走四个方向即可 思路 & 代码 class Solution {boolean[][] visited;boo ...

  7. 剑指 Offer(C++版本)系列:剑指 Offer 12 矩阵中的路径

    文章目录 同步GitHub在此

  8. 《剑指offer》——矩阵中的路径

    更多2019年的技术文章,欢迎关注我的微信公众号:码不停蹄的小鼠松(微信号:busy_squirrel),也可扫下方二维码关注获取最新文章哦~ T: 题目描述 请设计一个函数,用来判断在一个矩阵中是否 ...

  9. 剑指offer之矩阵中的路径

    题目描述: 请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径.路径可以从矩阵中的任意一格开始,每一步可以在矩阵中向左.右.上.下移动一格.如果一条路径经过了矩阵的某一格,那么 ...

最新文章

  1. 一个fork短码的扩展版本
  2. java 理论与实践,Java 理论与实践: 正确使用 Volatile 变量
  3. MapReduce 中文版论文(转载)
  4. android ui秘笈,看图说话 – Android UI 设计秘笈 :Part I
  5. 信用风险模型(申请评分、行为评分)与数据准备(违约期限、WOE转化)
  6. 【机器学习算法专题(蓄力计划)】十一、特征数据预处理
  7. python保存所有变量值_如何在当前python会话中保存所有变量?
  8. 一致性算法Paxos
  9. VMware虚拟机Bridged(桥接模式)
  10. 大型项目linux自动化版本发布脚本(shell)之tomcat、nginx服务脚本
  11. [转]如何配置sql server2005允许远程连接
  12. mysql mysqlhotcopy_mysql中mysqlhotcopy备份数据库总结
  13. 【托马斯微积分】(12版)阅读笔记1:函数
  14. 做数据分析不得不看的书有哪些?
  15. iozone使用简介
  16. 被炫龙DD3plus的insyde h20 bios整天了一整天分享分享解决问题经验
  17. credit author statement
  18. Ubuntu关机重启卡死在关机动画界面
  19. 工程项目管理思维导图模板
  20. T00ls内部旁注扫描器.rar

热门文章

  1. PAT甲级1075 PAT Judge:[C++题解]排序、结构体
  2. python调用命令行获取pid_python 使用标准库根据进程名获取进程的pid
  3. asp 表格渐变颜色_加班到半夜,同事却用WPS表格小技巧10分钟搞定工作!
  4. linux中ed编辑器手册,脚本编辑器 - Navicat 15 for Linux 产品手册
  5. JAVA按键关闭窗口csdn_JSP_卖jsp编程技巧的那个垃圾的所有实例的答案全部已收集,现将他人收集的实例答案公布出来,大家鉴赏!,1. 如何让选中的一行记录高亮 - phpStudy...
  6. java多语言标签如何动态刷新_WPF实现无刷新动态切换多语言(国际化)
  7. python控制鼠标,如何在Mac中使用Python控制鼠标?
  8. windows文件服务器双机热备_遇到ZFS文件系统如此棘手的问题,这种办法简单又高效!...
  9. 快速了解FAT32文件系统
  10. mongo查看数据库空间大小