最新消息:

自动生成随机迷宫(1)–prim算法

Scratch 少儿编程 3898浏览 0评论

友情提示:视频教程观看时请手动设置清晰度。

      “程序 = 数据  + 算法”,一款好的作品不单单是代码的堆砌,还有其灵魂的部分,那就是算法;算法是一系列解决问题的清晰指令,算法代表着用系统的方法描述解决问题的策略机制。算法既然是解决某类型问题的规范,那么我们就学习它,并在我们的作品中使用它。从这一期开始做一个迷宫系列,包括用算法生成随机迷宫,用算法自动寻址走迷宫。
        三大迷宫生成算法之一“随机Prim算法不是优先选择最近选中的单元格,而是随机的从所有的列表中的单元格进行选择,新加入的单元格和旧加入的单元格同样概率会被选择,新加入的单元格没有有优先权。因此其分支更多,生成的迷宫更复杂,难度更大,也更自然
 
 

自动生成随机迷宫(1)--prim算法

 
普里姆算法(Prim’s algorithm)在维基百科(wiki)中这样描述的:
 
自动生成随机迷宫(1)--prim算法

 

      是不是看着迷糊?图论的prim算法其实是最小生成树,与用prim生产迷宫算法有点差别,以下是我从网上找来生成迷宫的步骤要求:
 
(1)初始地图所有位置均设为墙
(2)任意插入一个墙体进墙队列
(3)判断此墙是否可以设置为路(判断依据在于上下左右四个位置是否只有一个位置是路)
(4)若设置为路,则将该位置周围(上下左右)的所有墙插入队列,接着执行(5);若无法设置为路,直接执行(5)
(5)从墙队列中删去当前位置所在节点
(6)若墙队列不为空,则从队列中随机选取一面墙重新执行(3),直到墙队列为空

 

     有了这个步骤就简单多了,首先新建一地图状态列表(初始化为1表示全是墙),然后定义三个列表分别用来存放待处理墙、某个格子周边的墙、周边的路。具体实现步骤写起来太啰嗦,还是看我的讲解视频吧。想要源代码的朋友加我个人微信获取吧~
 
相关视频:
 

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

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