首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

0,1矩阵中的递归路径查找(并保存所有可能的路径)

0,1矩阵中的递归路径查找是指在一个由0和1组成的矩阵中,从起点到终点寻找所有可能的路径。下面是一个完善且全面的答案:

递归路径查找是一种常见的算法问题,可以通过深度优先搜索(DFS)算法来解决。该算法通过递归的方式遍历矩阵中的每个位置,并根据特定的条件进行路径的选择和记录。

以下是一个基本的递归路径查找的实现思路:

  1. 定义一个函数来进行递归路径查找,该函数需要传入当前位置的坐标、当前路径、已访问的位置信息等参数。
  2. 在函数中,首先判断当前位置是否越界或已经访问过,如果是则返回。
  3. 然后判断当前位置是否为终点,如果是则将当前路径保存起来。
  4. 如果当前位置不是终点,则将当前位置标记为已访问,并根据特定条件选择下一个位置进行递归调用。
  5. 在递归调用结束后,需要将当前位置的访问状态恢复,并将当前位置从路径中移除,以便进行下一次路径选择。
  6. 最后,调用递归函数,从起点位置开始进行路径查找。

下面是一个示例代码:

代码语言:python
复制
def findPaths(matrix, row, col, path, visited, paths):
    # 判断当前位置是否越界或已经访问过
    if row < 0 or row >= len(matrix) or col < 0 or col >= len(matrix[0]) or visited[row][col]:
        return
    
    # 将当前位置标记为已访问
    visited[row][col] = True
    
    # 判断当前位置是否为终点
    if matrix[row][col] == 1:
        # 将当前路径保存起来
        paths.append(path + [(row, col)])
    else:
        # 选择下一个位置进行递归调用
        findPaths(matrix, row + 1, col, path + [(row, col)], visited, paths)
        findPaths(matrix, row - 1, col, path + [(row, col)], visited, paths)
        findPaths(matrix, row, col + 1, path + [(row, col)], visited, paths)
        findPaths(matrix, row, col - 1, path + [(row, col)], visited, paths)
    
    # 恢复当前位置的访问状态
    visited[row][col] = False

# 测试代码
matrix = [[0, 1, 0],
          [0, 0, 1],
          [0, 1, 0]]
visited = [[False] * len(matrix[0]) for _ in range(len(matrix))]
paths = []
findPaths(matrix, 0, 0, [], visited, paths)
print(paths)

在上述代码中,我们使用了一个二维数组visited来记录每个位置的访问状态,初始时都为False。通过调用findPaths函数,可以得到所有可能的路径,存储在paths列表中。

对于0,1矩阵中的递归路径查找问题,可以应用于许多实际场景,例如迷宫问题、图像分析等。在实际应用中,可以根据具体需求对算法进行优化,例如剪枝操作、动态规划等。

腾讯云相关产品和产品介绍链接地址:

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

LeetCode - 所有可能路径

,找到所有从 0 到 n-1 路径输出(不要求按顺序) 二维数组第 i 个数组单元都表示有向图中 i 号结点所能到达下一些结点(译者注:有向图是有方向,即规定了a→b你就不能从b→a)空就是没有下一个结点了...提示: 结点数量会在范围 [2, 15] 内。 你可以把路径以任意顺序输出,但在路径结点顺序必须保证。...来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/all-paths-from-source-to-target 著作权归领扣网络所有。...解题思路: 再次使用递归思想,...从第0个节点开始,如果当前是最后一个节点,也就是n等于数组大小,那么就返回一条路径;否则,为每条路径都添加当前节点访问; 最后返回List就是最后所有的0到n-1路径

71330

LeetCode:所有可能路径_797

思路 很基本深搜,还没有环,省了isVisited判断 go数组还是不太熟悉,在求得一条路线时,需要加入到路线集合,这里需要深拷贝,没留意到,导致出现了一些意料之外问题,看了题解才发现 go闭包挺香...,不用使劲传参,或者使用全局变量 题目 给你一个有 n 个节点 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 路径输出(不要求按特定顺序) graph[i] 是一个从节点 i 可以访问所有节点列表...示例 1: image.png 输入:graph = [[1,2],[3],[3],[]] 输出:[[0,1,3],[0,2,3]] 解释:有两条路径 0 -> 1 -> 3 和 0 -> 2 -> 3...= i(即不存在自环) graph[i] 所有元素 互不相同 保证输入为 有向无环图(DAG) Related Topics 深度优先搜索 广度优先搜索 图 回溯 263 0 代码 func allPathsSourceTarget

31210

矩阵路径

题目描述 请设计一个函数,用来判断在一个矩阵是否存在一条包含某字符串所有字符路径路径可以从矩阵任意一个格子开始,每一步可以在矩阵向左,向右,向上,向下移动一个格子。...如果一条路径经过了矩阵某一个格子,则该路径不能再进入该格子。...例如 a b c e s f c s a d e e 矩阵包含一条字符串"bcced"路径,但是矩阵不包含"abcb"路径,因为字符串第一个字符b占据了矩阵第一行第二个格子之后,路径不能再次进入该格子...思路 回溯法: 对于此题,我们需要设置一个判断是否走过标志数组,长度和矩阵大小相等 我们对于每个结点都进行一次judge判断,且每次判断失败我们应该使标志位恢复原状即回溯 judge里一些返回false...判断: 如果要判断(i,j)不在矩阵里 如果当前位置字符和字符串对应位置字符不同 如果当前(i,j)位置已经走过了 否则先设置当前位置走过了,然后判断其向上下左右位置走时候有没有满足要求.

1.1K20

LeetCode-797-所有可能路径

# LeetCode-797-所有可能路径 题目来自于力扣https://leetcode-cn.com/problems/all-paths-from-source-to-target 给你一个有...n 个节点 有向无环图(DAG),请你找出所有从节点 0 到节点 n-1 路径输出(不要求按特定顺序) 二维数组第 i 个数组单元都表示有向图中 i 号节点所能到达下一些节点,空就是没有下一个结点了...= i(即,不存在自环) graph[i] 所有元素 互不相同 保证输入为 有向无环图(DAG) # 解题思路 方法1、DFS 采用深度优先遍历方式求解所有路径 **初始状态:**从0号节点出发...**递归规则:**固定某一个节点(add操作),选择一个他邻居节点(循环遍历二维数组),记录他(add操作),在重复进行这三步 **回溯:**当这条路径走完了,或者遍历结束时,移除上一轮加入path...节点(remove操作) **终止条件:**当目前深度达到了数组length-1时结束,因为最后一个节点始终是空 # Java代码1 class Solution { List<List<

39620

寻找矩阵路径

a b t g c f c s j d e h 我们从矩阵[0][0]位置作为入口开始寻找,要查找第1个字符为b: 0,0 位置元素是a,与目标值不匹配,继续寻找0,1位置 0,1...2,2 位置元素是e,与目标值匹配,所有字符寻找完毕,该路径存在与矩阵 保存每一步已找到元素在矩阵索引 [2,2]位置 [1,2]位置 [1,1]位置 [0,1]位置 最终路径为:[0][1]...重复步骤3,直至所有匹配字符四个方向都被移动 字符串全部字符都被找到后,则取出每一步正确索引位置将其保存起来 四个方向都被移动后,仍未找到与字符所匹配元素,则证明该字符串不存在于矩阵 注意...、列是否超越矩阵界限 矩阵要寻找行、列位置元素与要寻找字符不相等则直接返回false 判断所有字符是否都查找完成 完成的话则存储行、列索引,返回true 未完成则保存当前行、列处值、修改该位置值为...,找到了当前要查找字符在矩阵位置 if (res) { // 保存当前要查找字符坐标点 this.pathIndex.unshift(`[${row}][${col

1.1K40

剑指offer 矩阵路径

题目描述 请设计一个函数,用来判断在一个矩阵是否存在一条包含某字符串所有字符路径路径可以从矩阵任意一个格子开始,每一步可以在矩阵向左,向右,向上,向下移动一个格子。...如果一条路径经过了矩阵某一个格子,则之后不能再次进入这个格子。...例如 a b c e s f c s a d e e 这样3 X 4 矩阵包含一条字符串"bcced"路径,但是矩阵不包含"abcb"路径,因为字符串第一个字符b占据了矩阵第一行第二个格子之后...首先,遍历这个矩阵,我们很容易就能找到与字符串str第一个字符相同矩阵元素ch。...为了避免路径重叠,需要一个辅助矩阵来记录路径情况。

41120

剑指offer 12:矩阵路径

题意 请设计一个函数,用来判断在一个矩阵是否存在一条包含某字符串所有字符路径路径可以从矩阵任意一个格子开始,每一步可以在矩阵向左,向右,向上,向下移动一个格子。...如果一条路径经过了矩阵某一个格子,则该路径不能再进入该格子。 例如 例如 ?...矩阵包含一条字符串"bcced"路径,但是矩阵不包含"abcb"路径,因为字符串第一个字符b占据了矩阵第一行第二个格子之后,路径不能再次进入该格子。...bool core(char *matrix, int row, int col, int rows, int cols, char *str, bool **visit) { //这是个递归调用...bool has_path = false; //假设当前格子被访问 visit[row][col] = 1; //递归思想

37120

矩阵路径

同一个单元格内字母不允许被重复使用。 例如,在下面的 3×4 矩阵包含单词 "ABCCED"(单词字母已标出) ?...board.length <= 200 1 <= board[i].length <= 200 board 和 word 仅由大小写英文字母组成 题解: DFS+剪枝 深度优先搜索: 可以理解为暴力法遍历矩阵所有字符串可能性...剪枝: 在搜索,遇到 这条路不可能和目标字符串匹配成功 情况(例如:此矩阵元素和目标字符不同、此元素已被访问),则应立即返回,称之为 可行性剪枝 ?...DFS 解析: 递归参数: 当前元素在矩阵 board 行列索引 i 和 j ,当前目标字符在 word 索引 k 。...搜索下一单元格: 朝当前元素 上、下、左、右 四个方向开启下层递归,使用 或 连接 (代表只需找到一条可行路径就直接返回,不再做后续 DFS ),记录结果至 res 。

30420

矩阵路径

如果 word 存在于网格,返回 true ;否则,返回 false 。 单词必须按照字母顺序,通过相邻单元格内字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻单元格。...同一个单元格内字母不允许被重复使用。 例如,在下面的 3×4 矩阵包含单词 "ABCCED"(单词字母已标出)。...= board[i][j] 3、是否满足期望条件就看查找下标值已达最大,如: if (currToFind == wordChars.length - 1) { return...= board[i][j]) { return false; } /** * 如果当前值符合期望,且查找下标值已达最大, 则表明已找到结果,返回true...,回溯,重新将元素标记为false visited[i][j] = false; return findResult; } 这样,题目剑指offer 12.矩阵路径,本文采用DFS

37110

golang刷leetcode 技巧(45)矩阵路径

请设计一个函数,用来判断在一个矩阵是否存在一条包含某字符串所有字符路径路径可以从矩阵任意一格开始,每一步可以在矩阵向左、右、上、下移动一格。...如果一条路径经过了矩阵某一格,那么该路径不能再次进入该格子。例如,在下面的3×4矩阵包含一条字符串“bfce”路径路径字母用加粗标出)。...[["a","b","c","e"], ["s","f","c","s"], ["a","d","e","e"]] 但矩阵不包含字符串“abfb”路径,因为字符串第一个字符b占据了矩阵第一行第二个格子之后...,路径不能再次进入这个格子。...<= 200 1 <= board[i].length <= 200 解题思路 1,深度优先遍历 2,首字母不匹配可以剪枝 3,注意golang slice 数据地址一样,所以,需要clone 路径

14020

矩阵路径

题目描述 判断在一个矩阵是否存在一条包含某字符串所有字符路径路径可以从矩阵任意一个格子开始,每一步可以在矩阵向上下左右移动一个格子。...如果一条路径经过了矩阵某一个格子,则该路径不能再进入该格子。 例如下面的矩阵包含了一条 bfce 路径。 ?...解题思路 使用回溯法(backtracking)进行求解,它是一种暴力搜索方法,通过搜索所有可能结果来求解问题。...回溯法在一次搜索结束时需要进行回溯(回退),将这一次搜索过程设置状态进行清除,从而开始一次新搜索过程。...例如下图示例,从 f 开始,下一步有 4 种搜索可能,如果先搜索 b,需要将 b 标记为已经使用,防止重复使用。在这一次搜索结束之后,需要将 b 已经使用状态清除,搜索 c。 ?

31910

剑指offer No.65 矩阵路径

题目描述 请设计一个函数,用来判断在一个矩阵是否存在一条包含某字符串所有字符路径路径可以从矩阵任意一个格子开始,每一步可以在矩阵向左,向右,向上,向下移动一个格子。...如果一条路径经过了矩阵某一个格子,则之后不能再次进入这个格子。...例如 a b c e s f c s a d e e 这样3 X 4 矩阵包含一条字符串"bcced"路径,但是矩阵不包含"abcb"路径,因为字符串第一个字符b占据了矩阵第一行第二个格子之后...首先,遍历这个矩阵,我们很容易就能找到与字符串str第一个字符相同矩阵元素ch。...为了避免路径重叠,需要一个辅助矩阵来记录路径情况。

19530
领券