问题标签 [backtracking]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1717 浏览

javascript - 获取两点之间的最短路径

我有以下数组:

该数组描述了它在两点之间的连接位置。例如从 1 到 7 有一种方式 1->2->7。

在 JavaScript 中,如何生成例如从 1 到 9 的最短路径?

更新

这是我到目前为止所做的,我的问题是如何保存路径?

0 投票
3 回答
1672 浏览

scala - 如何在 Scala 中停止回溯?

假设我正在通过回溯N-Queen解决问题(例如)。如果我想找到唯一一个(第一个)解决方案而不是所有解决方案怎么办。

我想我可以强制执行(例如,使用可变布尔标志)。我想知道如何在功能上做到这一点。

0 投票
1 回答
4169 浏览

c - ChessBoard C 代码中的遍历骑士

我已经编写了一个代码来遍历一个骑士到棋盘上的所有方格一次。这个(下面)代码的问题是,它工作到 7x7 并且在 8x8 之后什么都不做。代码在这里 chessBoardSize 定义了尺寸(8=> 8x8)

0 投票
2 回答
3027 浏览

java - 如何仅通过此回溯找到第一个解决方案

我正在尝试编写一个数独求解器,它只会返回第一个可能的解决方案。我设法用 void 方法打印了所有可能的解决方案,但我不能在第一次找到时停下来。

我知道首选的方法是切换到布尔方法并返回true树 - 但我找不到正确的方法来编写它。

我尝试的任何方式总是给出编译错误(method must return boolean)。

任何帮助将不胜感激。

0 投票
1 回答
739 浏览

algorithm - 算法回溯。计算图中的完美匹配

所以我是一名 cs 学生,我们被要求在 c 中构建一个回溯程序(没有循环,只有递归),它得到一个无向无权(无提升)图的邻接矩阵,并返回该图中完美匹配的数量否则为零。我想过使用使用 pfaffian 方向的 fkt 算法,但到目前为止我还没有弄清楚如何去做。如果您能如此友善,也许可以指导我阅读正确的书或以正确的方式看待这个问题,我将不胜感激。这是我第一次尝试回溯,我想我错过了一些关于如何实现这样的事情的基本概念。

0 投票
4 回答
486 浏览

debugging - Prolog 调用错误的规则。不能正确回溯

这是怎么回事?
我在使用 Prolog 时遇到了一些非常奇怪的问题。
在给定索引处替换列表中元素的递归规则并不总是有效。
我的规则如下所示:

当我在程序中使用调试器时,无论索引是什么,我都会看到它总是调用第二条规则,但是当我在程序外部执行完全相同的命令时,它运行得非常好。它到达索引 1 但调用第二条规则,并且不会回溯并尝试第一条规则并且一直失败......

调用 replaceAtIndex 的规则如下所示:

当我调试它的调用时,索引为 111。
当我用_index_in_list常量 111 替换它时,它可以工作。

任何人都可能知道为什么会发生这种情况?

0 投票
2 回答
4487 浏览

c - Futoshiki C 递归求解器

所以我有这个程序应该解决 C 中的一个 futoshiki 难题,它是从具有这种格式的文本文件加载的:

其中 5 是矩阵的大小,与运算符<, >,相邻^的数字v必须满足它们施加的条件,从文件中,行上的所有字符都除以空格,例如0 |......所以我设法加载该文件,以检查它是否满足数学运算符条件,但我被困在递归函数上

我想知道的:

我是否选择了正确的方式来存储矩阵,或者我应该将数字与逻辑运算符分开?

我如何对矩阵执行递归扩展,如何在某个步骤中跟踪使用的数字(以防我不得不回溯)?

例如。假设我到达index[j][j]where j<n(size of matrix) ,从那里开始我必须减少j(“接触”)数字并检查子矩阵是否满足条件

到目前为止,这是我设法编写的代码。

在哪里 :

char **readmat(int *n); //从文件中读取矩阵,消除字符之间的空格

void print(char **mat,int n);//打印存储的矩阵

int check(char **mat,int n); //检查大小为n的矩阵的项目是否满足数学运算符

int expand (char **mat,int n,int i);//这应该是一次获取一个元素并检查是否有任何条件要满足的递归函数,如果是,则递增它

示例的解决方案:如您所见,逻辑条件区域明显满足

0 投票
1 回答
154 浏览

c++ - 寻找更好的回溯系统

我将尝试用简单的术语来解释这一点,因为它可能比我发布代码要短。我做了一个递归解决方案的一部分,它必须通过选择正确的“移动顺序”来完成游戏,如果它陷入僵局,那么它必须回溯。我当前的系统通过在任何不起作用的移动上设置一个标识符来工作,以便在回溯时不能再次使用它,直到找到新的路径/移动顺序。

但是我遇到了一个问题;游戏可以达到只剩下两步的状态,它们都不能解决游戏。我目前的系统基本上会让这两个动作不断地相互交换,因为解决方案尝试下一个动作,发现它不起作用,然后尝试下一个。我相信我的问题是我重置了我的标识符,它告诉解决方案不要使用移动,每次移动时,但我不确定我会如何设置它。

如果您需要任何进一步的信息或有任何见解,请告诉我。谢谢!

0 投票
1 回答
109 浏览

antlr - ANTLR 语法在解析类似规则时不回溯

假设我有一个语法处理全局变量和 C 的一些变体的一些方法声明

如果我喂它:

语法为 int MAX;正确但随后它想将声明规则也应用于第二行,并且在到达 ( 时失败,此时我希望它回溯并应用下一个规则,这是程序的规则。有人可以告诉我为什么这没有发生?

0 投票
2 回答
7098 浏览

python - Python回溯算法

我正在尝试实现一个算法,该算法采用两个整数 n 和 k,其中 n 是一排座位的数量,k 是试图坐在该排的学生人数。问题是每个学生必须在两边至少有两个座位。我所拥有的是一个生成所有子集的函数(一个 0 或 1 的数组,1 表示有人坐在那里),我将它发送到一个函数以检查它是否是一个有效的子集。这是我为该功能提供的代码

该代码适用于 k 和 n 的小输入,但如果我得到更高的值,我会因为某种原因得到一个索引超出列表错误,我无法弄清楚。
任何帮助都非常感谢。

O 输入 a 是看起来像这样的列表

编辑:

调用进程的代码:

如果我使用这些数字,我得到的错误是