随机迷宫生成是算法中一个典型的例子,生成一个庞大且复杂的迷宫,人们进去以后很难走出来。一般来说,利用二维数组存储一个矩形迷宫,利用广度优先算法、深度优先算法、以及随机普里姆算法形成一个不含回路的迷宫,并且可以找到任意两点之间的路径。在分析三种算法中,我们选择了利用深度优先算法作为生成迷宫的办法。
利用二维数组可以简化运算,因为只需要将路径和墙壁的值设为1和0就可以生成迷宫。
一般来说,迷宫是不含回路的,也就是不会有某些点我们无法到达,迷宫的性质是让任意两点都可以有一条路径到达。
深度优先算法是从起点这个节点出发边进行探索,直到节点的所有出发边都被发现,之后进行回溯,发现尚未发现的节点,并以此节点为起点,重复上述过程,直至发现所有节点,完成迷宫创建为止。
我们限制了随机迷宫生成的大小,以更加清晰地看到迷宫的全貌。
图2.1迷宫生成方案
利用二维数组Maze创建整个地图,L为整个地图的大小。先给二维数组分配空间,空间大小为长L宽L,并标号i。
图2.2迷宫创建
然后确定迷宫的边界,在迷宫最外面一层边界设定为ROUTE,也就是路径,为以后防止挖出迷宫边界准备
图2.3迷宫边界确定
确定迷宫的出口和入口,将(2,1)设为入口,(2,2)设为起点,出口设为(L-3,L-2)。然后画出迷宫,ROUTE为路,wall为墙,让程序走过的路径全部为ROUTE。在终端中以“国”为墙,以“ ”为路径,以便更加清晰地显示迷宫。
图2.4画迷宫
挖掘迷宫时应让挖掘方向随机,同时避免挖穿墙体,
图2.5随机方向挖迷宫
如果挖到了ROUTE说明挖穿了墙体,此时应该返回,重新得到更小的range,然后再次挖掘,直到到达设定的出口停止挖掘。
图2.6判断路径是否挖穿
以下是算法流程图
图2.7流程