迷宫问题和递归回溯算法

时间:2010-12-09 20:32:53

标签: algorithm maze

我想实现Recursive backtracker算法来解决迷宫问题,但是我无法理解2.3 Command(“删除当前单元格和所选单元格之间的墙”)会对我有什么帮助吗?

  1. 将当前单元格标记为“已访问”
  2. 如果当前单元格中有任何未访问过的邻居
    1. 随机选择一个未访问的邻居
    2. 将当前单元格添加到堆栈
    3. 移除当前单元格与所选单元格之间的墙壁
    4. 将所选单元格设为当前单元格
    5. 递归调用此函数
  3. 否则
    1. 从堆栈中删除最后一个当前单元格
    2. 回溯到此功能的上一次执行
  4. 编辑 事实上,我想通过使用堆栈来解决迷宫问题的算法。

3 个答案:

答案 0 :(得分:4)

该算法是迷宫生成器而不是迷宫解算器。这个想法是你想要创建一个随机迷宫。您还希望迷宫中的所有点都可以从其他所有点到达。

如果您只是随意移除墙壁,很可能您的迷宫无法连接。递归回溯算法通过创建随机 walk 并沿着随机游走移除墙来处理此问题。递归回溯部分允许您走到迷宫中的每个细胞,即使您到达死胡同。

答案 1 :(得分:1)

您的算法适用于god模式。通常你应该做

  1. 如果当前单元格是退出,则完成
  2. 如果当前单元格中有任何未访问过的邻居不是墙
    1. 随机选择一个未访问的非墙邻居
    2. 将当前单元格添加到堆栈
    3. 没有
    4. 将所选单元格设为当前单元格
    5. 递归调用此函数
  3. 否则
    1. 从堆栈中删除最后一个当前单元格
    2. 回溯到此功能的上一次执行

答案 2 :(得分:0)

拆除墙壁意味着拆除墙壁!你从一个细胞网格开始,每个细胞完全由4个墙围绕。随机移动(2.1)时,移除连接单元格的墙壁。