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

时间:2017-03-07 11:47:06

标签: algorithm graph-theory depth-first-search breadth-first-search greedy

我想实现骑士之旅,并使用不同的搜索算法运行它,如bfs,dfs,a *等等。用户在棋盘上选择一个地方然后就会完成。问题是在选择后,我应该创建整个图形,就像从第一个位置到第二个位置的所有可能的移动一样,或者我应该一步一步地采取它,然后根据其算法,在第一级搜索中创建子项,然后在子级中创建子项。下一级?我希望我的问题很清楚,对不起我的英语。

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

你不搜索棋盘;搜索展示位置空间:

初始状态:没有骑士

有效移动:将骑士放在任何未占用的牌上

目标状态:所有图块都被占用或受到攻击

基本算法(状态空间的BFS):

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

相关问题