问题标签 [knights-tour]

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 投票
1 回答
250 浏览

java - Knight's Tour in Java(递归),使用 Graph 和 DFS

我正在尝试计算 5x5 场地上所有可能的骑士移动:

为此,我尝试使用 DFS(深度优先搜索)类和 Graph 类。

我认为将这些整个类粘贴到这篇文章中可能代码太多(并且可能不够相关),所以我在这里显示它们:

图.java

深度优先搜索.java

Graph.java 使用 Bag.java:

包.java

该字段看起来像这样(为每个字段使用一个 id):

CalculatePath 方法中使用了以下属性,该方法应计算骑士可以从特定方格到每个方格恰好访问一次(应该需要一两分钟才能解决)的可能旅行量。

可能的 Knight 步骤(在主类中)定义如下(使用 Graph 的边,G):

这是我试图找到可能的旅行:

例如,如果我尝试通过 调用此递归函数,它应该使用该场上的每个方格从该方格calculatePath(20)返回所有可能的游览( )。tours

未标记的广场是已经到达的广场,在同一次游览中不应再访问。

现在,问题是我不能让CalculatePath跳过已经访问过的方块(输出显示它从 20 到 17,从 20 到 11,然后停止递归方法)。

此外,该方法还没有计算多个旅行。我想首先正确计算一条路径并最终计算所有可能的行程。

我使用的所有代码都包含在这篇文章中 - 包括上面链接中的类。

0 投票
1 回答
49 浏览

pascal - 与预测不同的奇怪结果(骑士之旅)

我正在编写 Knight's tour 问题,以便在*n 棋盘中找到骑士的旅行。我做了2个答案,我认为是相同的。但是,编译时,两个代码会产生 2 个不同的结果。我想知道我的两个代码之间的区别。

这是我的第一个代码:http: //ideone.com/WUI7xD

我的第二个代码:http: //ideone.com/FdFQuX

0 投票
3 回答
698 浏览

recursion - 优化骑士之旅 LISP

我是 LISP 的新手,我在下面的代码中遇到了这个问题。

它返回一个错误 *** - 程序堆栈溢出。重置。当我在谷歌上搜索时,我意识到这是递归的结果。但是我不确定我应该如何优化这段代码来解决这个问题。任何帮助都深表感谢。

你好,上面是更新的代码。这是测试代码。(骑士巡演蛮力 5 5 1 1)

0 投票
1 回答
305 浏览

lisp - 骑士巡回赛回溯 Lisp

我在为这个程序生成正确的输出时遇到了一些问题。我的输出几乎是正确的,但缺少一些步骤。我的代码如下:

测试代码是

输出是((1 1) (3 2) (5 3) (4 5) (2 4) (1 2) (3 3) (5 4) (3 5) (1 4) (2 2) (4 3) (5 5) (3 4) (1 5) (2 3) (4 4) (2 5) (1 3) (2 1) (4 2))

这里列出了 21 个步骤,但它应该有 25 个。

0 投票
1 回答
626 浏览

java - 使用 DFS Java 的骑士之旅

我正在尝试实施Knight's tour

我一直在努力(更像是计划)它已经差不多 2~3 小时了。我仍然没有任何进展。好像找不到起点。。

下面是我必须修改为骑士之旅版本的基本 dfs 方法。

为简单起见,我选择将电路板尺寸设为 5x5。我用谷歌搜索并查看了一些解决方案,其中大多数对我来说没有意义。如何使用 DFS 方法?我想如果在不使用 DFS 的情况下使用递归,我可以在某种程度上实现它。但是,我不知道,甚至不知道从哪里开始使用 DFS。

谁能给我一些关于从哪里开始的指导?我不是在寻求解决方案,只是需要一个开始的地方

先感谢您。

0 投票
2 回答
1291 浏览

java - 骑士之旅递归方法Java

我正在尝试递归地实现骑士之旅。下面是我的代码。为简单起见,我选择了 5x5 板。我的目标是打印出正确的骑士位置,并可能在打印语句的同时显示回溯。

打印输出的一部分

我的问题是在这个过程的中间,我在索引 4,0 处遇到了一个死胡同(不是所有的方块都被覆盖,但没有我可以做的合法动作)。而且由于我没有包含任何回溯行。它只是跳转到索引 2,0,这甚至不是合法的骑士移动。

我的问题是如何用 if 语句表达死胡同?我想我应该将递归设置为某种布尔值并从那里开始,但我不知道该怎么做。

并且使用递归是否与使用 DFS(深度优先搜索)相同,因为它们基本上具有相同的想法?

先感谢您。

0 投票
1 回答
709 浏览

java - 使用 Graph(DFS) Java 的骑士之旅

我正在尝试使用 DFS 实现骑士之旅。为简单起见,我的板是 5x5。

下面是我的代码

我的程序从索引 0 开始,然后转到索引 7,如果您运行代码,您会注意到,这不是正确的解决方案(我还递归地编写了 knight's tour 以检查我应该从哪里开始获得正确的解决方案)。所以它应该一直回溯到起始方块 0,0 并转到索引 11,而不是它只是停止,因为当 theStack 为空时 while 循环结束。当它一直回溯到起点时,我怎样才能让它继续前进,以及如何在回溯时再次将访问过的方块标记为假。提升 TJE 班

先感谢您。

0 投票
2 回答
71 浏览

c++ - 骑士团异常行为

所以这是我的骑士之旅问题的代码,我一直在努力找出问题所在。

它通过命令行获取板的尺寸以及起始坐标。例如,运行“./Knight 5 5 0 0”会产生一个 5x5 矩阵并从坐标 0 开始。这看起来像

正如你所看到的,它一直运行到 13 点,当它开始重复自己时。我无法弄清楚为什么我的递归函数会这样做。任何帮助,将不胜感激。谢谢

0 投票
1 回答
256 浏览

haskell - haskell Chess Knight Tour:函数组合

我很难理解有关函数组合的国际象棋骑士问题。该练习是一个生成器/过滤器/选择器链,具有给定的包装函数(knightProblem),它将所有内容粘合在一起。

我不清楚作为链中第一部分的函数 kGenerator 应该如何处理多个参数:

我正在寻找有关如何处理此类问题的提示。

此致。

0 投票
0 回答
45 浏览

java - KnightsTour 解决方案,java.lang.StackOverflowError: null (in java.util.ArrayLists)

这是我的一门课程的作业,我正在尝试创建一个程序,该程序将找到游戏“Knights Tour”的解决方案。在这里播放:https ://www.brainbashers.com/knight.asp

我让我的程序递归运行,直到找到解决方案。有64!不同的组合,其中大多数不是解决方案。当它抛出错误时 java.lang.StackOverflowError: null(在 java.util.ArrayLists 中)找到大约 30 种不同的组合后,就会出现问题。

问题出在 ArrayList 上,其他论坛说是“HashMash”占用了大量内存。我想知道我是否应该从 2 个数组重新开始?