我正在尝试使用Racket中的DFS实现Knight's Tour。
我目前的实施涉及从当前位置生成合法移动列表(不在板外而不在前面的步骤列表中)并将其投入堆栈。然后我将第一个元素从堆栈中取出并递归运行算法,并将其作为下一个当前位置。如果移动的数量超过了棋盘上的方格数,那么我就知道我已经进行了详尽的搜索并且失败了。如果我无法生成任何合法节点,我知道我已完成骑士之旅并输出生成的多维数组。我还计算了生成的孩子数量(合法行动);如果该数字大于预先设定的max_node_count,则会中止算法。
我认为这个实现可能会遗漏一些东西。如果我只是移动到堆叠中的下一个位置,我不会在没有骑士之旅的情况下绕过棋盘吗?如何跟踪以前的正确位置和回溯?或者我应该使用不同的条件来检查完成情况。我想我是在意外地提前关闭算法。
当我运行当前的实现时,我收到消息,表明我已经用尽了搜索。我正在测试一个5x5的主板,所以肯定应该有一个解决方案。
我认为,当我进行详尽的搜索时,或者当我完成骑士之旅时,我的检查条件都有问题。我在下面的评论应该更详细地介绍我如何实施这些检查。
感谢阅读,感谢您的帮助。