【问题标题】:Tackling the 8-puzzle via BFS通过 BFS 解决 8 个难题
【发布时间】:2009-12-10 02:18:35
【问题描述】:

我听说可以通过 BFS 解决 8-puzzle 问题,但我不明白如何解决。我想知道我需要从这样的板上获得的中间步骤:

3 1 2
6 4 5
0 7 8

1 2 3
4 5 6
7 8 0 

BFS 搜索的中间步骤是“级别”吗?

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

【问题讨论】:

    标签: java breadth-first-search sliding-tile-puzzle


    【解决方案1】:

    这几乎是任何 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 拼图可能会扩展近一百万个节点,因此请确保您的状态对象很小或允许您的虚拟内存增长以避免内存错误。平均情况应该是 >100K 节点展开。
    猜你喜欢
    • 2017-09-27
    • 1970-01-01
    • 2023-02-02
    • 1970-01-01
    • 1970-01-01
    • 2012-05-10
    • 1970-01-01
    • 2020-04-12
    • 1970-01-01
    相关资源
    最近更新 更多