生成数字矩阵表示的迷宫

本文介绍如何生成数字矩阵表示的迷宫,1代表墙,0代表道路。通过细胞状态处理并使用深度优先搜索算法,标记每个细胞的相邻边界状态,最终形成迷宫。在遍历过程中,随机选择未访问的细胞并更新边界状态,用栈记录路径。当无未访问细胞时,回溯生成墙体。文章提供了不同尺寸的迷宫实例,并提及了其他迷宫生成算法如深度优先、随机Prim和递归分割。
摘要由CSDN通过智能技术生成

目标是生成数字矩阵表示的迷宫,数字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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值