检查所有迷宫墙是否连接的算法

时间:2013-12-06 21:40:04

标签: algorithm maze

我正在构建一个迷宫游戏并且正在寻找一种算法,如果它在迷宫中发现墙壁或一段墙壁没有连接到迷宫中的其余墙壁,则返回true(即墙壁岛屿)。我用来测试用户生成的迷宫是否可以解决的迷宫求解算法是“右手规则”(我的算法类似于所讨论的herehere),但它如果一个或多个墙壁没有连接到其他墙壁,则可能会失败。

我的迷宫存储在10整数的二维数组中,表示每面墙的当前/不存在状态。

有没有人知道最便宜的方法来计算迷宫(以上述格式保存)是否有任何与其他墙完全断开的墙?

非常感谢代码,伪代码或普通英语条件大纲。我计划将其翻译成javascript,如果有人正在寻找一种语言作为例子。

谢谢!

2 个答案:

答案 0 :(得分:4)

Flood-fill从一些起始墙上连接的所有墙壁。您可以通过将墙设置为其他值(例如2)或仅为此设置另一个2D数组来实现此目的。

再次穿过迷宫。如果您发现上述步骤中没有填充任何墙,我们知道它与其他墙没有连接。

但是,通过将已经访问过的单元格标记为已访问并且不再访问已访问过的单元格(再次使用其他值或其他数组)来制作解决算法的这一部分也可能有意义(或许更有意义) , 如上)。如果你这样做,墙壁是否连接起来并不重要。

答案 1 :(得分:1)

一种方法是选择一个随机墙并将其添加到空列表中。然后:

while the list isn't empty:
    take an item from the list
    mark the item as visited
    put all of its unvisited neighbors on the list

如果列表为空,则每个墙都会被访问过,或者您至少有两个不同的“孤岛”。