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。
一般来说,迷宫算法使用矩阵来表示迷宫,矩阵的每个元素是一个位集,指示哪些墙壁仍然存在。但威尔逊算法还需要记住每个位置的出口方向,这增
Clojure迷宫生成与拉链操作详解
超级会员免费看
订阅专栏 解锁全文
539

被折叠的 条评论
为什么被折叠?



