如题,牛客网上题目没有图示,下图是从原书中截图得到的。

本题就是从数组中按照指定方向查找字符序列,典型的回溯行为,找到当前字符,继续查找该字符上下左右四个方向,找不到,返回上一个字符,重新查找。题目要求,路径中不能访问同一个字符,可以创建一个等大小的bool二维数组,记录已访问的点,每次访问一个点,置标志位,注意。如果该点的后一个结点不符合,再返回上一个节点前,需要去掉该标志位。

使用递归进行回溯处理即可,注意特殊情况处理,例如,字符串数组为空或者给定的字符串为空等。

下面是本题c++代码,在牛客网上的剑指offer板块验证完成,仅供参考:

//递归查找路径,找到直接返回,找不到顺时针换方向查找
//查找的时候,将访问的结点置位。
//特殊情况:str为空或者字符数组为空。
class Solution {
public:bool searchPath(char* matrix, int rows, int cols, char* str, int prow, int pcol, vector<vector<bool>> &visited){char *pChar = str;//如果已经到了字符串末尾,则返回trueif (*pChar == '\0')return true;//判断是否超出边界if (prow < 0 || prow >= rows || pcol < 0 || pcol >= cols)return false;cout<<"["<<prow<<"]["<<pcol<<"]"<<endl;//判断是否该点已经访问过if (visited[prow][pcol])return false;//判断该点是否为所需字符if (matrix[prow*cols+pcol] == *pChar){//设置标志位,指向下一个字符visited[prow][pcol] = true;pChar++;//上if (searchPath(matrix, rows, cols, pChar, prow-1, pcol, visited))return true;//左if (searchPath(matrix, rows, cols, pChar, prow, pcol-1, visited))return true;//下if (searchPath(matrix, rows, cols, pChar, prow+1, pcol, visited))return true;            //右if (searchPath(matrix, rows, cols, pChar, prow, pcol+1, visited))return true;   //本点不符合,去掉置位visited[prow][pcol] = false;}elsereturn false;return false;}bool hasPath(char* matrix, int rows, int cols, char* str){int i = 0, j = 0;vector<vector<bool>> visited(rows, vector<bool>(cols, false)), &rVisited = visited;//特殊情况处理if (matrix == nullptr || str == nullptr || (rows == 0 && cols == 0))return false;//搜索路径for (; i < rows; i++){for (j = 0; j < cols; j++){if (matrix[i*cols+j] == *str && searchPath(matrix, rows, cols, str, i, j, rVisited))return true;}}return false;}
};

=============================================================================================

Linux应用程序、内核、驱动、后台开发交流讨论群(745510310),感兴趣的同学可以加群讨论、交流、资料查找等,前进的道路上,你不是一个人奥^_^。

《剑指offer》c++版本 12. 矩阵中的路径相关推荐

  1. 剑指Offer - 面试题12. 矩阵中的路径(DFS回溯)

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

  2. 剑指offer面试题12. 矩阵中的路径(矩阵搜索)(深度优先搜索)(剪枝)

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

  3. 剑指offer(65)矩阵中的路径

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

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

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

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

    剑指 Offer 12. 矩阵中的路径 思路一:DFS+回溯 DFS 解析: 递归参数: 当前元素在矩阵 board 中的行列索引 i 和 j ,当前目标字符在 word 中的索引 k . 终止条件: ...

  6. 利用指针数组计算2个3行4列矩阵的和_[剑指 Offer] 04. 二维数组中的查找

    难度:简单 题目链接:剑指 Offer 04. 二维数组中的查找 题目描述: 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数, ...

  7. 剑指 Offer 04. 二维数组中的查找

    剑指 Offer 04. 二维数组中的查找 在一个 n * m 的二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个高效的函数,输入这样的一个二维数组和一个 ...

  8. 《LeetCode力扣练习》剑指 Offer 29. 顺时针打印矩阵 Java

    <LeetCode力扣练习>剑指 Offer 29. 顺时针打印矩阵 Java 一.资源 题目: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字. 示例 1: 输入:matr ...

  9. 剑指offer:二维数组中的查找

    目录 题目 解题思路 具体代码 题目 题目链接 剑指offer:二维数组中的查找 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺 ...

最新文章

  1. PCIe配置空间和PCI设备中的寄存器
  2. 数据库-关系代数的分类
  3. netty源码解解析(4.0)-2 Chanel的接口设计
  4. SwiftUI3.0用户登录输入非空校验经典案例
  5. 十年磨一剑 | 淘宝如何打造承载亿级流量的首页?
  6. c# 第七节 编程规范,vs中的各种设置
  7. Linux入门的基础知识点
  8. WIZ ConfigTool-批量配置WIZnet S2E模块
  9. 苹果cms替换资源_苹果maccms v10二次更新只替换某一个资源图片
  10. C# 打开CMD窗口并执行CMD 指令
  11. 2021-03-27
  12. [论文速览]A Neural Attention Model for Sentence Summarization
  13. 敏捷管理 -- 时间和成本管理
  14. java关于hashmap编程题_在Java中,关于HashMap类的描述,以下说法错误的是( )。...
  15. 域环境SID相同到底有什么影响?
  16. 总结输入法挡住输入框方案
  17. 程序员合同日期不到想辞职_“我又辞职了”
  18. 收下这份「实体店爆款活动清单」,国庆爆单很简单!
  19. 网页MP3播放器代码
  20. 前端js图片跨域问题解决方案

热门文章

  1. poj 1556 (Dijkstra + Geometry 线段相交)
  2. 计算器是如何计算sin、cos等科学函数的值呢?
  3. 俄亥俄州立大学计算机科学排名,俄亥俄州立大学CS专业排名2020年
  4. 双层lstm每层有自己的权重参数吗_一幅图真正理解LSTM的物理结构
  5. 在分类的意义上最稳定的物体是什么?
  6. 学习率对神经网络迭代次数的影响
  7. react ajax 分页,一款简单的react分页组件
  8. stopstart按钮怎么用_烟雾报警器一直响吵人!怎么彻底给关掉?
  9. 【Paper】2017_Limit-Cycle-Based Decoupled Design of Circle Formation Control with Collision Avoidance
  10. STM32 LWIP TCP 数据包分包后合并,超过591字节后分会分包问题