完美迷宫生成算法

您所在的位置:网站首页 迷宫定义 完美迷宫生成算法

完美迷宫生成算法

2023-06-29 07:27| 来源: 网络整理| 查看: 265

Perfect maze

Perfect maze又称standard maze,指没有回路,没有不可达区域的迷宫。用图论的语言来说,就是可以用spanning tree表示的迷宫,保证迷宫中任意两个格子间都有唯一的路径。本文旨在探讨如何随机生成棋盘状perfect maze。迷宫格子的邻居的定义采用von Neumann neighborhood,即水平竖直方向相邻的四个格子。

变形Kruskal算法

说得通俗点,就是“随机拆墙”。

一开始假设所有墙都在。如果当前不满足“任意两个格子间都有唯一路径”,那么就随机选择一堵墙,要求墙两端的格子不连通,即它们对应的两个顶点不在一个connected component里。

把这堵墙拆掉,即在后墙两端的格子对应的顶点间建立一条边,此时connected component数就减少一了。不断地找墙、拆墙,最后就能形成一个看上去挺随机的迷宫。

伪代码 W = 所有墙 T = {} number_of_components = N*N while number_of_components > 1 (u, v) = W.pop if component(u) != component(v) T (a, a) -> STRef s StdGen -> ST s arand range g = do (a, g') >= walk (w*h) Maze freeze right freeze bottom maze :: Int -> Int -> StdGen -> ST s Maze maze w h gen = do let mk = newArray ((0,0), (w-1,h-1)) :: Bool -> ST s (STArray s (Int, Int) Bool) visited


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3