目标是生成数字矩阵表示的迷宫,数字1表示不可通行的墙体,数字0表示可通行的道路,如下图:
11111111111111111
10100000000010001
10101111111010101
10001010001010101
11111010101010101
10000010100010101
10111110111111101
10000000100000001
10111111101111101
10001010000010001
11101010111011111
10001000001010001
10111111111010101
10001000001000101
11101011101111101
10000010000000001
11111111111111111
为了方便逻辑处理,我们不直接生成方块的墙或者方块的路,而是标记可走的路的最小单元cell的上下左右四个边的状态,这个状态是可通行或者不可通行。这里不关注墙,请直接忽略,后面通过路的最小单元的四个边的状态来生成墙。
注意,这里的cell表示道路的最小单元,它有四个状态,分别表示上下左右四条边的状态。和墙没有关系。
从某一个cell开始遍历,从当前cell的相邻的未访问的cell集合中随机选一个作为下一时间状态的cell,并将这两个cell相邻的两条边的状态置为可通行,并将每个时间状态的cell存入一个后进先出栈stack。当当前的cell周围没有未访问的cell时,从stack中出栈一个cell作为新的时间状态的cell。
初始cell入栈stack
当前cell置为初始cell
循环,终止条件:栈stack为空
将当前cell的访问状态置为已访问
如果,当前cell有相邻的未访问cell
随机选择相邻的未访问cell中的一个cell
当前cell与随机选择的cell之间的相邻的两个状态置为可通行
随机选择的cell入栈stack
当前cell置为随机选择的cell
否则
从stac