我正在学习骑士的旅行算法。我使用递归罚款实现,但它需要很长时间,几乎不是一个封闭的旅游。
现在,我正在寻找一种快速查找闭路旅行的算法。有人可以推荐一些算法吗?
更新:我已经在某处找到了一个启发式方法,可以找到这样一个封闭的骑士之旅: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
是棋盘的大小。但是我如何使用该启发式?
答案 0 :(得分:2)
骑士的旅行问题实际上是在相应的图表中找到哈密尔顿循环,这已知是NP难的,所以这个问题也可能难以解决。
但是,有几种启发式方法可以让您执行快速查找。其中一种启发式是Warnsdorff的规则:
在每个步骤移动到正方形,从中可以获得较少的移动。如果有几个这样的方格,请移动到其中任何一个方格。
这是一个非常好的启发式方法,并且很长一段时间以来一直被认为是骑士路径问题的解决方案,并且示例表明规则的第二部分可能导致错误的决定,后来发现计算机使用时间很长。< / p>
答案 1 :(得分:0)
我今天解决了这个问题,在骑士图中实施了深度优先搜索(图表模拟了骑士的可能动作)。
虽然我花了整整一个下午想知道为什么Warnsdorff的启发式还不够,但问题是我的出发点。
我从(0,0)位置开始DFS。如果从中间的某个地方开始,看起来DFS会得到极大改善,如(3,3)。更改后,算法速度从(1小时内没有解决方案)到(1秒内1个解决方案)。
我已经测试了你的Min [F(x,y)]启发式算法,它看似与Warnsdorff的规则相同(对于一个8x8的表格)。