实现骑士的游览图并将其与不同的搜索算法一起使用

Implementing knight's tour graph and using it with different search algorithms

我想实现骑士之旅,运行 它使用不同的搜索算法,如 bfs、dfs、a* 等 on.User 在棋盘上选择一个位置,然后 done.The 问题是在选择之后,我应该创建整个图,就像从第一个位置然后从第二个位置开始的所有可能的移动等等,或者我应该一步一步来,然后根据它的算法创建 children 在第一级搜索中然后在下一级搜索 children of children?我希望我的问题很清楚,对不起我的英语。

如果我对这个问题的理解正确,一个可行的方法是不要在生成后继状态方面明确表示博弈树,而是保留棋盘的一个实例并通过使用函数递归地实现搜索来生成所有可能的动作,执行动作和撤消动作;通过这样做,游戏树的检查部分将通过使用调用堆栈隐式表示,而回溯步骤通过撤消最后一步并从当前递归调用返回来实现。

在每次迭代中,从队列中弹出一个节点,直到到达目的地。通过使用列表记录以前的历史移动来放弃重复移动。为了简化实现,每次,当前的移动历史数组也被推入队列。这明显是BFS(Breadth First Search)算法,保证找到的第一条路径是最短的。


你不搜棋盘;搜索 space 个展示位置:

初始状态:没有放置骑士

有效移动:在任何未被占据的方格上放置一个骑士

目标状态:所有地块要么被占领要么被攻击

基本算法(状态space的BFS):

将初始状态推送到 BFS 队列。 当队列中有东西时: 从队列中删除一个状态。 对于每个未占用的瓷砖: 创建当前状态的副本。 将一名骑士添加到该板块。 如果队列中不存在新状态: 如果新状态是目标状态,则完成。 否则将其添加到队列中。