使用不相交集类生成迷宫(2)

本文探讨了改进迷宫生成算法,通过提前检查等价类避免重复工作,同时减少假路,目标优化时间复杂度至O(N)。作者分享了解决方案,包括检查房间连通性和策略性地打通角落,最终生成更高效迷宫。展示了生成的迷宫实例。
摘要由CSDN通过智能技术生成

上一篇的代码已经解决了如何存储与打印一个迷宫的问题,并且我们虽然浪费了一点点内存空间和使用了一个不那么精巧的算法,使得时间不是最理想的——事实上可能是不太理想的。但是我感觉啊,我们也许可以证明这样的方法它的时间界不会太高,因为我们总共有2N(N-1)面墙,而最理想情况,我们只需打通2N面墙(尽管这将是一个简单过头的迷宫)。

笔者的数学能力就到此为止了,数据结构书上给出算法的时间复杂度在2N到4N之间,为O(NlogN)。

上次的代码有一个问题我疏忽了——在多次打通一些墙体之后,迷宫会显得十分低能,解决这个办法的问题是,在打通墙体之前进行检查这两个房间是否已经是个等价类。相关代码十分容易,仅有一行,便不展示了。

此外,我仍然发现迷宫不是很理想,我作为没有经过训练的普通人,可以在十秒内发现25*25的迷宫的解,这是因为假路实在太少了。解决这个办法需要更复杂的判断。但是我已经对这个问题失去了兴趣,我草率的解决方案是试着打通左下角和右上角以增加可能的假路。

最后生成的迷宫效果图如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值