用生成树算法生成迷宫,这种技巧只头发少的人才知道!

本文介绍了如何使用Kruskal算法生成完美迷宫,详细阐述了Kruskal算法与最小生成树的概念,并结合并查集进行优化。通过路径压缩提高效率,最终实现了一个美观的迷宫生成效果。
摘要由CSDN通过智能技术生成

前言

很多地牢类型的游戏都会生成随机的地牢地图,一张好的地牢地图是非常具有美感的;生成迷宫要比生成地牢简单一些,不需要考虑房间的放置,生成迷宫可以说是生成地牢的基础(同时也是一种参考)
生成迷宫的常见算法有递归回溯、递归分治等等;生成树算法生成的迷宫是比较美观的完美迷宫 所谓完美迷宫,就是任何两个可达点之间只有一条通路;这个性质天生和生成树十分契合,下面要用Kruskal最小生成树算法生成一个完美迷宫

Kruskal 算法

生成树:对连通图进行遍历,过程中所经过的边和顶点的组合可看做是一棵普通树,通常称为生成树;生成树必须符合两个条件:1)包含连通图中所有的顶点;2)任意两顶点之间有且仅有一条通路
最小生成树:无向连通图边权和最小的生成树
可见生成树的特点和完美迷宫非常契合(可达点之间有且仅有一条通路),所以生成树算法都可以用来生成迷宫
Kruskal算法:一种常见的最小生成树算法,该算法的基本思想是维护一堆集合,查询两个元素(节点)是否属于同一集合,合并两个集合,直到形成一棵树

#### Kruskal 算法描述 ####
1. 输入:一个加权连通图,其中顶点集合为V,边集合为E
2. 初始化:E'为新的边集,初始为空
3. 排序E,依次取E中最小边,若两边节点不属于同一集合,则合并节点,将边加入E';否则忽略
4. 重复 步骤3 知道E'中边数量达到n-1(节点总数为n),则生成树完成
5. 使用E'描述最小生成树 

并查集

并查集:一种属性数据结构,支持两种操作:1)确定某个元素处于哪个子集;2)将两个子集合并成一个集合
关于并查集,有个广为流传的形象比喻:几个家族进行宴会(也有说门派的),但是家族普遍长寿,所以人数众多。由于长时间的分离以及年龄的增长

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

图灵课堂诸葛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值