生成随机迷宫(2)–深度优先(递归回溯)算法

生成随机迷宫(2)--深度优先(递归回溯)算法

   

       深度优先算法也叫“不撞南墙不回头”,由它生成的迷宫极度扭曲,但有着一条明显的主路;如果当前单元有相邻的未访问过的迷宫单元,就一直向前搜索,直到当前单元没有未访问过的迷宫单元,才返回查找之前搜索路径上未访问的迷宫单元,所以用堆栈来维护已访问过的迷宫单位。

————————————————

 

算法主循环,重复下面步骤2直到堆栈为空:

 

1 随机选择一个迷宫单元作为起点,加入堆栈并标记为已访问

2 当堆栈非空时,从栈顶获取一个迷宫单元(不用出栈),进行循环

        如果当前迷宫单元有未被访问过的相邻迷宫单元

               随机选择一个未访问的相邻迷宫单元

               去掉当前迷宫单元与相邻迷宫单元之间的墙

               标记相邻迷宫单元为已访问,并将它加入堆栈

      否则,当前迷宫单元没有未访问的相邻迷宫单元

               则栈顶的迷宫单元出栈

 

      其实这个算法很简单也很好理解,不要以为算法就是很高深莫测的样子,它其实就是解决某一类问题的模板,比如很多的RPG游戏,只有一条主线外加好多支线;支线走不通就回溯到主线上,最终都会到达终点。

 

        言归正传,首先要将地图初始化成周围是一圈墙,迷宫单元被墙分隔开来的状态。

 

生成随机迷宫(2)--深度优先(递归回溯)算法

代码如下

生成随机迷宫(2)--深度优先(递归回溯)算法

 

       说明一下,为了处理方便,将迷宫的行列数设置为奇数,将每个单元的状态(显示、访问状态)存储在列表里,具体操作用到四个列表。

 

生成随机迷宫(2)--深度优先(递归回溯)算法

主程序就按照算法步骤一步一步走的,逻辑非常简单。

 

 

生成随机迷宫(2)--深度优先(递归回溯)算法

其他方法代码如下:

 

返回某个单元周围情况有上下左右四个特殊情况需要排除,代码有点长只粘贴了一部分

 

生成随机迷宫(2)--深度优先(递归回溯)算法

 

生成随机迷宫(2)--深度优先(递归回溯)算法

地图状态列表全部判断生成后,就是根据列表状态生成相应的迷宫了。

 

生成随机迷宫(2)--深度优先(递归回溯)算法

发布了346 篇原创文章 · 获赞 250 · 访问量 55万+

猜你喜欢

转载自blog.csdn.net/weixin_40897235/article/details/103987804