0
我听说8-puzzle问题可以通过BFS解决,但我不明白。我想知道,我需要从董事会得到这样的中间步骤:通过BFS解决8个难题
3 1 2
6 4 5
0 7 8
到
1 2 3
4 5 6
7 8 0
是在BFS搜索中间步骤“的水平”?
顺便说一下,这是基本的功课,我不关心最优性。
我听说8-puzzle问题可以通过BFS解决,但我不明白。我想知道,我需要从董事会得到这样的中间步骤:通过BFS解决8个难题
3 1 2
6 4 5
0 7 8
到
1 2 3
4 5 6
7 8 0
是在BFS搜索中间步骤“的水平”?
顺便说一下,这是基本的功课,我不关心最优性。
这是相当多的任何BFS搜索
function next_boards(board)
yields a set of reachable in one move from the current board
queue = [start_board]
while true:
current = queue.pop()
if current = goal: break
queue.push for all next_boards(current)
注意,我们没有做任何幻想比如检查周期或任何一个模板。如果我们是,将队列更改为堆栈,并获得DFS。
是的,基本上使用一个FIFO队列,并扩展到每个可能的下一个节点的每个节点。如果我没有弄错,在最糟糕的情况下,8-puzzle可能会扩展近百万个节点,因此请确保您的状态对象很小或允许虚拟内存增长以避免内存错误。平均情况应该是> 100K节点扩展。 – 2009-12-10 18:59:55