2009-12-10 22 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