2009-12-10 85 views
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搜索中间步骤“的水平”?

顺便说一下,这是基本的功课,我不关心最优性。

回答

4

这是相当多的任何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。

+1

是的,基本上使用一个FIFO队列,并扩展到每个可能的下一个节点的每个节点。如果我没有弄错,在最糟糕的情况下,8-puzzle可能会扩展近百万个节点,因此请确保您的状态对象很小或允许虚拟内存增长以避免内存错误。平均情况应该是> 100K节点扩展。 – 2009-12-10 18:59:55