最新消息:380元/半年,推荐全网最具性价比的一站式编程学习平台码丁实验室

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

Scratch 少儿编程 3828浏览 1评论

友情提示:380元/半年,儿童学编程,就上码丁实验室

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

   

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

 

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

 

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

 

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

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

 

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

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

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

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

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

               则栈顶的迷宫单元出栈

 

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

 

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

 

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

 

代码如下

 

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

 

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

 

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

 

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

 

 

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

 

其他方法代码如下:

 

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

 

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

 

 

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

 

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

 

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

转自公众号:
嘻嘻哈哈学编程

您必须 登录 才能发表评论!

网友最新评论 (1)

  1. 代码不全啊,能不能发个完整的。
    wojiujinlaikankan5年前 (2019-12-26)