(二)随机Prim算法
可以先看看这篇博客的介绍:https://blog.csdn.net/juzihongle1/article/details/73135920
作者是这样描述的:
1.让迷宫全是墙.
2.选一个单元格作为迷宫的通路,然后把它的邻墙放入列表
3.当列表里还有墙时
--1.从列表里随机选一个墙,如果这面墙分隔的两个单元格只有一个单元格被访问过
--------1.那就从列表里移除这面墙,即把墙打通,让未访问的单元格成为迷宫的通路
--------2.把这个格子的墙加入列表
--2.如果墙两面的单元格都已经被访问过,那就从列表里移除这面墙
对比随机prim算法,深度优先算法每次循环时参与打通的墙只有末端附近的墙,而随机prim算法每次参与循环时会不断增加可选择的墙的列表。所以深度优先算法生成的迷宫有一条明显的主路,而随机prim算法生成的迷宫随机性更强,更自然。
下面是大致的思路:
需要这些值参与循环:
“陆地”列表 - RestPoints
未被选择的墙列表 - BlueRest
参与随机选择的墙的列表 - RandomSel
路径序号 - RoadPaths
墙序号 - WallPaths
循环判断依据:1.判断随机选择的墙两侧的“陆地”是否共同存在于“陆地”列表:
如果True,则把这堵墙打通,
如果False,则保留这堵墙。
2.因为每次循环都需要把新选择“陆地”附近的墙加入参与随机选择的墙的列表,有可能出现周围没有墙的情况,所以需要判断附近未被选择的墙的数量是否为0:
如果True,则直接进入下一此循环;
如果False,则把附近的墙加入参与随机选择的墙的列表进入下一此循环;
终止判断依据:
如果“陆地”列表没有点了,则终止循环。
最后join一下offset一下loft一下Union一下extrude一下
迷宫电池图:
百度网盘地址:
链接:https://pan.baidu.com/s/1hg2TDEi9R1sr53iQUnpkMw
提取码:fhb6