backtracking 相关问题

回溯是用于找到某些计算问题的解决方案的通用算法,其逐步地为解决方案构建候选者。

LeetCode 39. 组合和 - 如何避免重复

我正在做leetcode 39.组合和: 给定一组不同的整数候选者和一个目标整数目标,返回候选者的所有唯一组合的列表,其中所选数字...

回答 2 投票 0

实现堆栈以对结构使用回溯

这是一个使机器人能够沿着黑线穿过“迷宫”的程序。迷宫由 7x7 的黑线组成,并有一条入口线穿过其中。可以有空的方块和引导线

回答 1 投票 0

多次递归返回

我正在做leetcode 79 C++解决方案,你需要在2D矩阵中查找单词。我用回溯来做到这一点 类解决方案{ 民众: 布尔回溯(int row,int col,int N,向量 我正在做leetcode 79 C++解决方案,你需要在二维矩阵中找到单词。我正在用回溯来做到这一点 class Solution { public: bool backtrack(int row, int col, int N, vector<vector<char>>& matrix, const string& word, const int num_rows, const int num_cols, const int word_size, bool& result) { if (word[N]==matrix[row][col]) //Letter in matrix equals current word letter { if (N==word_size or result) //BASE CASE: Reached end of word return result = true; map_been[row][col] = true; //Cell is used if (row!=0 and map_been[row-1][col]==0)} //Going up backtrack(row-1, col, N+1, matrix, word, num_rows, num_cols, word_size, result); if (col!=num_cols and map_been[row][col+1]==0)} //Going right backtrack(row, col+1, N+1, matrix, word, num_rows, num_cols, word_size, result); if (row!=num_rows and map_been[row+1][col]==0)} //Going down backtrack(row+1, col, N+1, matrix, word, num_rows, num_cols, word_size, result); if (col!=0 and map_been[row][col-1]==0)} //Going left backtrack(row, col-1, N+1, matrix, word, num_rows, num_cols, word_size-1, result); map_been[row][col] = false; //clean-up map } return result; } bool exist(vector<vector<char>>& matrix, string word) { int num_rows = matrix.size(); int num_cols = matrix[0].size(); int word_size = word.size(); bool result=false; vector<vector<bool>> map_been (num_rows, (vector<bool> (num_cols, false))) for (int i=0; i<num_rows; i++) for (int j=0; j<num_cols; j++) //starting from every matrix position { if (backtrack(i, j, 0, matrix, word, num_rows-1, num_cols-1, word_size, result)) return true; } return false; } }; 在每个递归步骤中,我有 4 个变体:向上、向左、向右或向下,每个步骤都会产生新的递归。我想知道当我找到整个单词(基本情况)时如何结束所有递归,因为现在当我找到它时,程序会继续向左、向右等计数。 使用递归的结果,一旦成功就返回。 您还可以移动有效性检查以简化流程,并使用参数的大小而不是传递它们。 这里有一个不同的建议: bool backtrack(int row, int col, int N, const vector<vector<char>>& matrix, const string& word) { return N == word.size() // Found it. || ( // Validity checks. row >= 0 && row < matrix.size() && col >= 0 && col < matrix[0].size() && N < word.size() && word[N] == matrix[row][col] // Keep searching. && ( backtrack(row-1, col, N+1, matrix, word) || backtrack(row, col+1, N+1, matrix, word) || backtrack(row+1, col, N+1, matrix, word) || backtrack(row, col-1, N+1, matrix, word))); }

回答 1 投票 0

Leetcode 1255-递归与回溯

我不太明白为什么当我们有第二个 for 循环来恢复 letterCount 时我们使用 .clone() 方法。当我在没有 .clone() 方法的情况下运行这段代码时,它给了我错误的答案.. .

回答 1 投票 0

使用回溯C++解决迷宫

我有这个二维矩阵迷宫。 “@”表示开始,“#”表示结束。 0表示路径被封锁,1表示可以通过。程序需要解决迷宫和原理...

回答 1 投票 0

查找所有路径问题(Java中的递归和回溯)

我一直在关注 Java 数据结构和算法的播放列表,并且遇到了回溯主题,其中为您提供了一块板,以及起点 (0,0) 和终点...

回答 1 投票 0

有没有简单的方法用Python制作回溯算法?

我需要帮助制作Python算法。我想制作一个网格并根据某些规则在单元格上放置“x”。网格有 15 行和 100 列。每个

回答 1 投票 0

为什么基于文本的正则表达式引擎无法处理惰性量词?

我多次遇到过,基于文本的正则表达式引擎无法支持惰性量词。但我找不到原因。但我后来知道,他们内部使用 DFA,而且他们不会回溯......

回答 1 投票 0

在leetcode问题212-单词搜索2中使用backtrcaking获得TLE,即使在修剪之后,我如何进一步优化它[关闭]

问题 给定一个 m x n 的字符板和一个字符串单词列表,返回板上的所有单词。 每个单词必须由顺序相邻的单元格的字母构成,其中相邻的 ce...

回答 1 投票 0

我想制作一个数独求解器

这是代码: 公开课数独{ 公共静态无效 printSudoku(int sudoku[][]){ for(int i = 0; i < sudoku.length; i++){ for(int j = 0; j < sudoku[i].length; j+...

回答 1 投票 0

为什么这种解决 8 个皇后问题的方法总是返回 0

这是我的代码。 使用命名空间 std; 整数 ans = 0; 字符串 il[8]; //不能包含皇后的方格 void quen(int x, int y, 布尔表1[15],布尔表2[15],布尔表3[8]){ 如果(il[y][x...

回答 1 投票 0

计算矩阵中的路径 - 回溯

给定一个 M*N 矩阵,我想计算从左上角单元格 (0,0) 到右下单元格 (m-1, n-1) 的可能路径总数。可能的移动包括上、下、右、左。 ...

回答 1 投票 0

发生异常:AttributeError“str”对象没有属性“变量”[重复]

我目前正在尝试为一个大学项目编写一个回溯解析器。它应该解决作业调度问题。我创建了 2 个类来执行此操作:JobSchedulingProblem 和 Constraint。 CL...

回答 1 投票 0

调试 Leetcode 46 的回溯算法:排列问题?

我正在使用回溯算法来解决经典问题。 Leetcode排列问题。 给定一个由不同整数组成的数组 nums,返回所有可能的排列。您可以返回答案...

回答 1 投票 0

为什么我的代码不能解决我的golang回溯问题

我在学校遇到了以下问题,但我一生都无法找到解决方案。任何帮助将不胜感激: 一个盒子中有 9 个长方体(27 厘米 x 31 厘米 x 43 厘米)。你的工作是...

回答 1 投票 0

在 while 循环期间字典值未正确更新

我目前正在尝试为数独求解器编写时间回溯算法。我有几个位置存储为FlexiblePositions,它表示为数组中的两个整数...

回答 1 投票 0

使用回溯查找排列

我无法理解回溯解决方案。我对算法和递归很陌生。这是一个leetcode问题。力扣46。 类解决方案: def permute(self, nums: List[int]) ->...

回答 1 投票 0

“空间置换”问题中O(2^n)是如何实现的?

基本上问题陈述是:给定一个字符串,返回所有可能的排列,其中字母之间添加(或不添加)空格 例子: 输入:ABC; 输出:ABC、A BC、AB C、A B C; 我...

回答 1 投票 0

尝试通过这个简单的例子来了解回溯是如何在 php 上工作的

我试图了解回溯在 php 上的工作原理。我理解了理论,但我不理解代码。 这是一个简单的例子: 函数排列($nums) { $结果=数组();

回答 1 投票 0

生成括号 - 我哪里出错了

所以问题来了。对于给定的 n,我们需要生成所有有效的括号。 例如,对于 n=2,可能的输出将为 ()(), (())) 所以我尝试使用递归和回溯来解决。 我拿...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.