【问题标题】:Fast algorithm to find closed knight's tour寻找封闭骑士之旅的快速算法
【发布时间】:2013-04-05 07:52:53
【问题描述】:

我正在学习骑士的巡回算法。我使用递归精细实现,但它需要很长时间,而且几乎不是封闭的。

现在,我正在寻找一种快速算法来查找封闭式游览。有人可以给我推荐一些算法吗?

更新: 我在某处读到了一个启发式方法,可以找到这样的封闭骑士之旅:Min[F(x, y)] 其中F(x,y) is a set of f(x,y)=Min(x-1, n-x) + Min(y-1, n-y)(x, y) 是下一步的位置,n 是棋盘的大小。但是我该如何使用这种启发式方法呢?

【问题讨论】:

  • 我认为骑士在更大的棋盘上的巡回赛是通过将棋盘分成块然后在每个子棋盘上以可以链接在一起的方式解决巡回赛来完成的。
  • 感谢您的回复!我将首先在 8x8 方形板上实现这个,但对我来说仍然很难:D
  • 我认为诀窍是为此使用正确的数据结构

标签: algorithm knights-tour


【解决方案1】:

骑士之旅问题其实就是在对应的图中找到一个哈密顿圈,已知这个圈是NP难的,所以这个问题也可能很难解决。

但是,有几种启发式方法可让您执行快速查找。 Warnsdorff 规则就是其中一种启发式方法:

在每一步移动到方格,从该方格可以进行较少可能的移动。如果有多个这样的方格,请移至其中任何一个。

这是一个非常好的启发式算法,长期以来一直被认为是骑士路径问题的解决方案,并且在计算机使用后很久才发现了表明规则的第二部分可能导致错误决策的示例。

【讨论】:

  • Grigor Gevorgyan:我发现你的第一句话有点误导。虽然寻找哈密顿循环的问题一般来说是 NP 难的,但骑士之旅的复杂性可能会有所不同,因为它是一种特殊情况。
  • @anonymous:是的,你是对的,我想说这个问题可能和哈密顿路径问题一样难。我会编辑答案,谢谢。
  • 感谢您的回答,但似乎Warnsdorff's rule 不会总是找到一个封闭的旅游,不是吗?
  • @BìnhNguyên:是的,这是关于寻找路径。有一些将路径转换为路由的方法,例如欧拉的方法,如果我找到一个好的描述,我会把它添加到我的答案中。
【解决方案2】:

我今天解决了这个问题,在 Knight Graph 中实现了深度优先搜索(该图对 Knight 的可能动作进行建模)。

当我整个下午都在想为什么 Warnsdorff 的启发式方法还不够时,问题是我的出发点。

我从 (0,0) 位置开始 DFS。如果你从中间的某个地方开始,比如 (3,3),看起来 DFS 得到了极大的改进。更改后,算法速度从(1小时内无解)变为(1秒内有1个解)。

我还测试了您的 Min[F(x,y)] 启发式算法,它的性能似乎与 Warnsdorff 规则相同(对于 8x8 表)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    相关资源
    最近更新 更多