算法迷宫 深度优先算法
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流程
算法迷宫 深度优先算法相关推荐
- 浅谈网络爬虫中广度优先算法和深度优先算法
前言 做爬虫的,最怕业务简单粗暴的来一句"爬一下XXXX网".比如,"爬一下央广网"(示例链接:http://www.cnr.cn),看着密密麻麻的各种子分类, ...
- 广度优先算法和深度优先算法-树形结构(层级结构)-Java
广度优先算法和深度优先算法-树形结构(层级结构)-Java 目录 文章目录 1.前言 2.递归 3.栈+深度优先算法 4.队列+广度优先算法 5.比较 ***后记*** : 内容 1.前言 在日常应用 ...
- Java与算法之(5) - 老鼠走迷宫(深度优先算法)
小老鼠走进了格子迷宫,如何能绕过猫并以最短的路线吃到奶酪呢? 注意只能上下左右移动,不能斜着移动. 在解决迷宫问题上,深度优先算法的思路是沿着一条路一直走,遇到障碍或走出边界再返回尝试别的路径. 首先 ...
- 老鼠迷宫java_Java与算法之(5) - 老鼠走迷宫(深度优先算法)
小老鼠走进了格子迷宫,如何能绕过猫并以最短的路线吃到奶酪呢? 注意只能上下左右移动,不能斜着移动. 在解决迷宫问题上,深度优先算法的思路是沿着一条路一直走,遇到障碍或走出边界再返回尝试别的路径. 首先 ...
- BFS广度优先算法, DFS深度优先算法,Python,队列实现,栈实现
来源:https://www.bilibili.com/video/BV1Ks411575U/?spm_id_from=333.788.videocard.0 BFS广度优先算法 graph = {& ...
- 十五数码难题 A*算法及深度优先算法实现
一.问题描述 二.算法分析 在搜索的每一步都利用估价函数 f(n)= g(n)+h(n)对 Open 表中的节点进行排序表中的节点进行排序, 找出一个最有希望的节点作为下一次扩展的节点.且满足条 件: ...
- python 广度优先算法和深度优先算法遍历的实现
用这个图为例子 用字典存储这个图 graph = {'A':['C','B'],'B':['A','C','D'],'C':['A','B','E','D'],'D':['B','C','E','F' ...
- 回溯算法与深度优先算法
搜索与回溯是计算机竞赛中常用的算法,当很多问题无法通过计算法则来求解时,便可以利用搜索和回溯的技术来求解. 回溯是搜索算法中的一种控制策略,它的基本思想是:为了求得问题的解,先选择一种可能的情况向前探 ...
- 数据结构算法_深度优先算法例题(带简易流程图)
万能的搜索_解救小青 #include <stdio.h> int n, m, p, q, min = 99999999; int a[51][51], book[51][51];void ...
最新文章
- JS加法函数,用来得到精确的加法结果(说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果)
- vue 增加js日志输出文件_Vue.JS项目导入导出JSON文件的方案之一,其他项目也可参考...
- php项目webpack打包,Vue项目webpack打包部署时Tomcat刷新报404错误问题如何处理
- ceph 查看是否在恢复_Ceph的最佳实践
- jquery三级联动模糊查询_jquery三级联动
- 云服务器磁盘挂载_云小课 | 磁盘容量不够用?小课教你来扩容!
- python函数参数定义顺序_Python函数定义-位置参数-返回值
- SAP UI5 Gateway后台ETAG校验逻辑
- 学习总结——Selenium元素定位
- jQuery UI 下载 拖动组件
- python用什么编译器-15款Python编辑器的优缺点,别再问我quot;选什么编辑器”啦
- linux常用知识命令
- ISO 27001解读(二)风险评估
- Windows系统字体和系统应用字体
- 春晚红包互动:中国云计算的成长史
- 剖析矩阵的本质及其意义
- .Net core----使用容联云短信推送
- python3爬虫(5):财务报表爬取入库
- Systrace 基础知识 - 锁竞争解读
- 【数据库】 MySQL备份恢复
热门文章
- Module compiled with Swift xxx cannot be imported by the Swift xxx compiler
- Windows10关闭系统防火墙
- 创建java源程序_java – 如何从源代码构建Mojarra
- python-py文件在windows下乱码
- AUTOSAR成长之路
- Internet Graphics Server (IGS) - SAP NETWEAVER 图片服务
- 设计模式之内功心法 SOLID五大原则
- python图形统计代码_python tkinter图形界面代码统计工具
- Ubuntu 16.04LTS 下omnetpp的安装与nesting模型导入过程
- word论文中如何任意设置页码?摘要不计页数?目录设置?取消页眉横线?