算法迷宫 深度优先算法

1.1关于随机迷宫生成的问题

随机迷宫生成是算法中一个典型的例子,生成一个庞大且复杂的迷宫,人们进去以后很难走出来。一般来说,利用二维数组存储一个矩形迷宫,利用广度优先算法、深度优先算法、以及随机普里姆算法形成一个不含回路的迷宫,并且可以找到任意两点之间的路径。在分析三种算法中,我们选择了利用深度优先算法作为生成迷宫的办法。

1.2问题分析

利用二维数组可以简化运算,因为只需要将路径和墙壁的值设为1和0就可以生成迷宫。

一般来说,迷宫是不含回路的,也就是不会有某些点我们无法到达,迷宫的性质是让任意两点都可以有一条路径到达。

深度优先算法是从起点这个节点出发边进行探索,直到节点的所有出发边都被发现,之后进行回溯,发现尚未发现的节点,并以此节点为起点,重复上述过程,直至发现所有节点,完成迷宫创建为止。

2.1迷宫生成方案

我们限制了随机迷宫生成的大小,以更加清晰地看到迷宫的全貌。

图2.1迷宫生成方案

 

利用二维数组Maze创建整个地图,L为整个地图的大小。先给二维数组分配空间,空间大小为长L宽L,并标号i。

图2.2迷宫创建

 

然后确定迷宫的边界,在迷宫最外面一层边界设定为ROUTE,也就是路径,为以后防止挖出迷宫边界准备

图2.3迷宫边界确定

 

确定迷宫的出口和入口,将(2,1)设为入口,(2,2)设为起点,出口设为(L-3,L-2)。然后画出迷宫,ROUTE为路,wall为墙,让程序走过的路径全部为ROUTE。在终端中以“国”为墙,以“ ”为路径,以便更加清晰地显示迷宫。

图2.4画迷宫

挖掘迷宫时应让挖掘方向随机,同时避免挖穿墙体,

图2.5随机方向挖迷宫

如果挖到了ROUTE说明挖穿了墙体,此时应该返回,重新得到更小的range,然后再次挖掘,直到到达设定的出口停止挖掘。

图2.6判断路径是否挖穿

以下是算法流程图

图2.7流程

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值