15、Clojure 中的迷宫生成与拉链操作

Clojure迷宫生成与拉链操作详解

Clojure 中的迷宫生成与拉链操作

1. step 与 indexed - step 的区别及迷宫生成算法基础

在数据结构的使用上,step 和 indexed - step 除了通用与具体索引的区别外,还有作用范围的不同。indexed - step 作用于有限的矩形网格,而 step 作用于无限的平面网格。不过,我们可以使用 stepper 轻松重建 indexed - step,假设 w h 全局或局部绑定到所需有限网格的宽度和高度:

(stepper #(filter (fn [[i j]] (and (< -1 i w) (< -1 j h)))
            (neighbours %)) #{2 3} #{3})

接下来,我们研究威尔逊迷宫生成算法。该算法是一种“雕刻”算法,它从一个完全封闭的“迷宫”开始,通过移除一些墙壁来创建一个实际的迷宫。其原理如下:
1. 随机选择一个位置并标记为已访问。
2. 随机选择一个尚未访问的位置,如果没有未访问的位置,则返回迷宫。
3. 从新选择的位置开始进行随机游走,直到遇到一个已访问的位置。如果在随机游走过程中多次经过同一个位置,始终记住离开该位置的方向。
4. 将随机游走经过的所有位置标记为已访问,并根据最后已知的“出口方向”移除墙壁。
5. 重复步骤 2。

一般来说,迷宫算法使用矩阵来表示迷宫,矩阵的每个元素是一个位集,指示哪些墙壁仍然存在。但威尔逊算法还需要记住每个位置的出口方向,这增

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值