快速算法找到封闭骑士之旅

时间:2013-04-05 07:52:54

标签: algorithm

我正在学习骑士的旅行算法。我使用递归罚款实现,但它需要很长时间,几乎不是一个封闭的旅游。

现在,我正在寻找一种快速查找闭路旅行的算法。有人可以推荐一些算法吗?

更新:我已经在某处找到了一个启发式方法,可以找到这样一个封闭的骑士之旅: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是棋盘的大小。但是我如何使用该启发式?

2 个答案:

答案 0 :(得分:2)

骑士的旅行问题实际上是在相应的图表中找到哈密尔顿循环,这已知是NP难的,所以这个问题也可能难以解决。

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

在每个步骤移动到正方形,从中可以获得较少的移动。如果有几个这样的方格,请移动到其中任何一个方格。

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

答案 1 :(得分:0)

我今天解决了这个问题,在骑士图中实施了深度优先搜索(图表模拟了骑士的可能动作)。

虽然我花了整整一个下午想知道为什么Warnsdorff的启发式还不够,但问题是我的出发点。

我从(0,0)位置开始DFS。如果从中间的某个地方开始,看起来DFS会得到极大改善,如(3,3)。更改后,算法速度从(1小时内没有解决方案)到(1秒内1个解决方案)。

我已经测试了你的Min [F(x,y)]启发式算法,它看似与Warnsdorff的规则相同(对于一个8x8的表格)。