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. 浅谈网络爬虫中广度优先算法和深度优先算法

    前言 做爬虫的,最怕业务简单粗暴的来一句"爬一下XXXX网".比如,"爬一下央广网"(示例链接:http://www.cnr.cn),看着密密麻麻的各种子分类, ...

  2. 广度优先算法和深度优先算法-树形结构(层级结构)-Java

    广度优先算法和深度优先算法-树形结构(层级结构)-Java 目录 文章目录 1.前言 2.递归 3.栈+深度优先算法 4.队列+广度优先算法 5.比较 ***后记*** : 内容 1.前言 在日常应用 ...

  3. Java与算法之(5) - 老鼠走迷宫(深度优先算法)

    小老鼠走进了格子迷宫,如何能绕过猫并以最短的路线吃到奶酪呢? 注意只能上下左右移动,不能斜着移动. 在解决迷宫问题上,深度优先算法的思路是沿着一条路一直走,遇到障碍或走出边界再返回尝试别的路径. 首先 ...

  4. 老鼠迷宫java_Java与算法之(5) - 老鼠走迷宫(深度优先算法)

    小老鼠走进了格子迷宫,如何能绕过猫并以最短的路线吃到奶酪呢? 注意只能上下左右移动,不能斜着移动. 在解决迷宫问题上,深度优先算法的思路是沿着一条路一直走,遇到障碍或走出边界再返回尝试别的路径. 首先 ...

  5. BFS广度优先算法, DFS深度优先算法,Python,队列实现,栈实现

    来源:https://www.bilibili.com/video/BV1Ks411575U/?spm_id_from=333.788.videocard.0 BFS广度优先算法 graph = {& ...

  6. 十五数码难题 A*算法及深度优先算法实现

    一.问题描述 二.算法分析 在搜索的每一步都利用估价函数 f(n)= g(n)+h(n)对 Open 表中的节点进行排序表中的节点进行排序, 找出一个最有希望的节点作为下一次扩展的节点.且满足条 件: ...

  7. python 广度优先算法和深度优先算法遍历的实现

    用这个图为例子 用字典存储这个图 graph = {'A':['C','B'],'B':['A','C','D'],'C':['A','B','E','D'],'D':['B','C','E','F' ...

  8. 回溯算法与深度优先算法

    搜索与回溯是计算机竞赛中常用的算法,当很多问题无法通过计算法则来求解时,便可以利用搜索和回溯的技术来求解. 回溯是搜索算法中的一种控制策略,它的基本思想是:为了求得问题的解,先选择一种可能的情况向前探 ...

  9. 数据结构算法_深度优先算法例题(带简易流程图)

    万能的搜索_解救小青 #include <stdio.h> int n, m, p, q, min = 99999999; int a[51][51], book[51][51];void ...

最新文章

  1. JS加法函数,用来得到精确的加法结果(说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果)
  2. vue 增加js日志输出文件_Vue.JS项目导入导出JSON文件的方案之一,其他项目也可参考...
  3. php项目webpack打包,Vue项目webpack打包部署时Tomcat刷新报404错误问题如何处理
  4. ceph 查看是否在恢复_Ceph的最佳实践
  5. jquery三级联动模糊查询_jquery三级联动
  6. 云服务器磁盘挂载_云小课 | 磁盘容量不够用?小课教你来扩容!
  7. python函数参数定义顺序_Python函数定义-位置参数-返回值
  8. SAP UI5 Gateway后台ETAG校验逻辑
  9. 学习总结——Selenium元素定位
  10. jQuery UI 下载 拖动组件
  11. python用什么编译器-15款Python编辑器的优缺点,别再问我quot;选什么编辑器”啦
  12. linux常用知识命令
  13. ISO 27001解读(二)风险评估
  14. Windows系统字体和系统应用字体
  15. 春晚红包互动:中国云计算的成长史
  16. 剖析矩阵的本质及其意义
  17. .Net core----使用容联云短信推送
  18. python3爬虫(5):财务报表爬取入库
  19. Systrace 基础知识 - 锁竞争解读
  20. 【数据库】 MySQL备份恢复

热门文章

  1. Module compiled with Swift xxx cannot be imported by the Swift xxx compiler
  2. Windows10关闭系统防火墙
  3. 创建java源程序_java – 如何从源代码构建Mojarra
  4. python-py文件在windows下乱码
  5. AUTOSAR成长之路
  6. Internet Graphics Server (IGS) - SAP NETWEAVER 图片服务
  7. 设计模式之内功心法 SOLID五大原则
  8. python图形统计代码_python tkinter图形界面代码统计工具
  9. Ubuntu 16.04LTS 下omnetpp的安装与nesting模型导入过程
  10. word论文中如何任意设置页码?摘要不计页数?目录设置?取消页眉横线?