问题标签 [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 回答
220 浏览

prolog - 将列表从最短到最长排序

我最近拿起了序言,并正在尝试制作一个程序来为著名的拼图骑士之旅找到解决方案 [在此处找到]

使用Warnsdorff算法,我试图找到可以从棋盘上的特定位置进行的所有可能的移动,然后进行移动后可能移动最少的移动,然后重复该过程,但是我有找不到所说的动作。

到目前为止,这是我的代码

由于仅在找到所有可能移动的数量后才计算它们,因此我的列表未按我需要的方式排序。

例如这个输入

结果应该是

但是我得到

如果有人可以帮助我获得最低分数NewXNewY那就太好了

0 投票
1 回答
374 浏览

c# - 骑士之旅递归

有人能找到我的错误knight's tour code吗?我似乎找不到它,我得到一个无限循环,而不是堆栈溢出

并称它为:

我需要有一个jmp变量,因为我正在执行多次试验并且还想显示所采用的路径。谢谢!

0 投票
1 回答
174 浏览

c - 在骑士巡回赛回溯中陷入无限循环

这段代码在我正在使用回溯解决的骑士之旅问题中陷入无限循环。我已经使用x[8] and y[8]数组来访问可能的8方向移动。我也形成了这些xy数组与已经解决的答案相同。但是我仍然缺少一些东西,我无法理解出了什么问题。

0 投票
1 回答
74 浏览

c++ - 递归呼吸优先搜索适用于第一次执行,但不适用于执行后

CodeReview提出的解决方案在 CentOS 7.1 上运行良好。我已尝试将其移植到 Windows 7、Visual Studio 2012。稍作编辑以允许 VS 2012 不支持代码编译的 C++11 部分,并且循环的第一次执行正常工作。测试用例的其余执行失败,每次执行都越来越不正确。

这个问题的代码可以在github上找到。

在 0 完成计算 /* 这里的问题不包括在问题中 */
经过的时间:0.202012 秒

所有路径搜索的起点为 A3 所有路径搜索
的目标点为 H4
棋盘每条边上的方格数为 8
用于进一步限制搜索的切片方法是不重复访问任何行或列。
有 5 条结果路径
有 323 条尝试路径
平均路径长度为 4.8
中值路径长度为 4
最长路径为 6 步
最短路径为 4 步

我相信问题出在下面列出的文件之一中。我已经调试了2天,我可以使用一些帮助。

CRKnightMoves_Cpp2.cpp

KnightMovesImplementation.h

KnightsImplementation.cpp

KMMoveFilters.h

KMMoveFilters.cpp

0 投票
0 回答
978 浏览

c# - 用 C# 实现骑士之旅

我正在尝试在 C# 中实现 Knights Tour 问题。

我参考了这个链接中的 C++ 代码:

http://www.geeksforgeeks.org/backtracking-set-1-the-knights-tour-problem/

几个小时以来,我一直在摸不着头脑,试图弄清楚为什么我的 c# 代码(几乎与 C++ 代码相同)不会产生相同的结果。我想我实际上出于某种原因陷入了无限循环。

这是 C# 代码:

在 Main 方法中执行:

0 投票
2 回答
667 浏览

algorithm - 骑士之旅,数数从A到B的步数

骑士位于 (a,b) 位置,需要夺取位于 (c,d) 的国王。我怎样才能:

A:可视化游览

B:计算从 (a,b) 到 (c,d) 所需的最小步数

我发现的实现基本上是一个骑士在棋盘上的一系列移动,这样骑士只访问每个方格一次,但我想更具体一点,进入一个特定的位置。

我应该寻找什么样的算法或策略?

我正在考虑使用python

0 投票
1 回答
64 浏览

algorithm - 如何确定一次可以走(i,j)步的“骑士”是否可以覆盖NxN板?

通常,骑士一次移动 (1,2) 步,即向一个方向移动 1 步,向另一个方向移动 2 步。在一般版本中,它可以一次移动 (i,j) 步。

我不确定这是否是骑士之旅的问题,因为我不记得一次访问一个广场的限制。此外,答案只是是/否,我们不需要知道实际路径。

我的一个想法本质上是将棋盘点视为图形,并对所有有效的 (i,j) 移动进行深度优先搜索并将其标记为已访问。最后,如果有任何未访问的广场,那是不可能的。但是,这占用了 N^2 空间,我想知道是否有更简单的解决方案,因为这是一个是/否的问题。

0 投票
2 回答
119 浏览

java - 骑士的巡回递归没有找到解决方案

之前有人问过骑士的巡回演出,但我仍然遇到问题。我正在尝试递归访问棋盘的所有单元格,但访问次数不能超过 52 次。之后,它回溯并且访问的单元格的数量倒计时。这是我的代码:

0 投票
1 回答
1306 浏览

c++ - 在 C++ 类中初始化用户定义的数组?

我正在研究骑士之旅问题,并且想定义一个类,但是在初始化用户定义的数组时遇到了麻烦。因此,用户从命令行输入的argvs是棋盘长度 mX 和 nY;和一个起始位置(x,y)。所以基本上,我如何初始化用户定义的数组?

第一个问题:在public部分中,声明是否正确int ** tour

第二个问题:如何tour在同一个类中的以下函数中引用数组?

第三个问题: 中main,我调用K.knight了用户指定的维度数组进行初始化,但是没有初始化。如何在main使用该函数时初始化一个数组K.knigt(),并能够在下面的函数中使用该数组K.knightfunc()

0 投票
1 回答
110 浏览

algorithm - Haskell:如果我尝试超过 55 步,骑士之旅永远不会结束?

这是我的代码:

你知道为什么它永远不会完成吗(也许我可以再等一下......)?您是否有其他解决方案来实现相同的蛮力算法但会更快?