JZ12 矩阵中的路径

矩阵中的路径_牛客题霸_牛客网

描述

请设计一个函数,用来判断在一个n乘m的矩阵中是否存在一条包含某长度为len的字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则该路径不能再进入该格子。 例如

abcesfcsadee\]⎣⎡​asa​bfd​cce​ese​⎦⎤​ 矩阵中包含一条字符串"bcced"的路径,但是矩阵中不包含"abcb"路径,因为字符串的第一个字符b占据了矩阵中的第一行第二个格子之后,路径不能再次进入该格子。 数据范围:0≤n,m≤20 0≤n,m≤20 ,1≤len≤25 1≤len≤25 ### 示例1 输入:\[\[a,b,c,e\],\[s,f,c,s\],\[a,d,e,e\]\],"abcced" 返回值:true > > 回溯: > > 用回溯解决的问题的所有选项可以形象地用树结构表示,在某一步可能有n个可能的选项,那么该步骤可以看成是树状结构中的一个节点,每一个选项看成树中节点连接线,经过这些连接线到达该节点的n个子节点,树的叶子节点对应着终结状态。 > > 如果树的叶子节点不满足约束条件,那么只好回溯到它的上一个节点再尝试其他选项,如果上一个节点的所有可能的选项都试过了,并且不能满足约束条件的终结状态,再回溯到上一个节点。如果所有节点的所有选项都已经尝试过仍然不能满足约束条件的终结状态,则该问题无解。 剑指Offer --p88 ```cpp #include #include class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param matrix char字符型vector> * @param word string字符串 * @return bool布尔型 */ bool hasPath(vector >& matrix, string word) { // write code here int rows = matrix.size(); int cols = matrix[0].size(); vector> visited(rows, vector(cols, false)); int word_pos = 0; for(int row = 0; row < rows; ++row){ for(int col = 0; col> &matrix, int row, int col, vector>& visited,string &word, int word_pos){ if(word.c_str()[word_pos] == '\0') return true; if(row < 0 || row >= matrix.size() || col < 0 || col >= matrix[0].size() || matrix[row][col] != word[word_pos] || visited[row][col]) return false; visited[row][col] = true; // bool hasPath = hasPathCore(matrix, row+1, col,visited, word, word_pos+1)|| hasPathCore(matrix, row-1, col,visited, word, word_pos+1)|| hasPathCore(matrix, row, col+1,visited, word, word_pos+1)|| hasPathCore(matrix, row, col-1,visited, word, word_pos+1); visited[row][col] = false;//递归完四个方向后回到原来的状态继续进行决策 return hasPath; } }; ```

相关推荐
CoovallyAIHub3 分钟前
不改权重、不用训练!BEM用背景记忆抑制固定摄像头误检,YOLO/RT-DETR全系有效
算法·架构·github
Struggle_97557 分钟前
算法知识-从递归入手三维动态规划
算法·动态规划
yuan1999713 分钟前
使用模糊逻辑算法进行路径规划(MATLAB实现)
开发语言·算法·matlab
不才小强16 分钟前
线性表详解:顺序与链式存储
数据结构·算法
CoovallyAIHub17 分钟前
上交+阿里 | Interactive ASR:Agent框架做语音识别交互纠错,1轮交互语义错误率降57%
算法·架构·github
Aaron158827 分钟前
8通道测向系统演示科研套件
人工智能·算法·fpga开发·硬件工程·信息与通信·信号处理·基带工程
计算机安禾32 分钟前
【数据结构与算法】第42篇:并查集(Disjoint Set Union)
c语言·数据结构·c++·算法·链表·排序算法·深度优先
吃着火锅x唱着歌34 分钟前
LeetCode 150.逆波兰表达式求值
linux·算法·leetcode
YuanDaima20481 小时前
二分查找基础原理与题目说明
开发语言·数据结构·人工智能·笔记·python·算法
阿Y加油吧1 小时前
两道中等 DP 题拆解:打家劫舍 & 完全平方数
算法·leetcode·动态规划