扒一扒Prim迷宫算法
时间:2019-08-18
本文章向大家介绍扒一扒Prim迷宫算法,主要包括扒一扒Prim迷宫算法使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
不可预知性是所有事件之源头
——某位哲学家
本文主题:Prim算法可以吃吗
引入问题
小明家后面的公园准备开张啦!公园建筑方为了美观,准备修建一个纯天然不添加的迷宫。已知迷宫为15*15,四围除出入口外都围了墙(如下图)
# | E | # | # | # | # | # | # | # | # | # | # | # | # | # |
# | # | |||||||||||||
# | # | |||||||||||||
# | # | |||||||||||||
# | # | |||||||||||||
# | # | |||||||||||||
# | # | |||||||||||||
# | # | |||||||||||||
# | # | |||||||||||||
# | # | |||||||||||||
# | # | |||||||||||||
# | # | |||||||||||||
# | # | |||||||||||||
# | @ | |||||||||||||
# | # | # | # | # | # | # | # | # | # | # | # | # | # | # |
迷宫说明:
#是墙
E是入口,@是出口
Q:现在请你生成一个随机的迷宫Start your SHOW
问题求解
先给个链接(https://nolanjing.github.io/maze/)自己体验一下Prim迷宫算法的美丽
下面是关于Prim算法的解释
Prim迷宫算法的文本解释
English: 1.Start with a grid full of walls. 2.Pick a cell, mark it as part of the maze. Add the walls of the cell to the wall list. 3.While there are walls in the list: 1.Pick a random wall from the list. If only one of the two cells that the wall divides is visited, then: 2.Make the wall a passage and mark the unvisited cell as part of the maze. 3.Add the neighboring walls of the cell to the wall list. 2.Remove the wall from the list. 中文: 1.让迷宫全是墙. 2.选一个单元格作为迷宫的通路,然后把它的邻墙放入列表 3.当列表里还有墙时 1.从列表里随机选一个墙,如果这面墙分隔的两个单元格只有一个单元格被访问过 1.那就从列表里移除这面墙,即把墙打通,让未访问的单元格成为迷宫的通路 2.把这个格子的墙加入列表 2.如果墙两面的单元格都已经被访问过,那就从列表里移除这面墙 ———————————————— 出自 维基百科
看不懂?可视版解释来一波我打这么多字你确定不给我一个赞和关注吗
Prim迷宫算法的可视版解释(栗子)
我们现在看一个缩水版的迷宫因为我懒
1.让迷宫全是墙(新增墙$)
# | E | # | # | # | # | # |
# | $ | $ | # | |||
# | $ | $ | $ | $ | $ | # |
# | $ | $ | # | |||
# | $ | $ | $ | $ | $ | # |
# | $ | $ | @ | |||
# | # | # | # | # | # | # |
2.随机选择一个单元格(如下图%),此时放入列表的墙为&(红色为随机选中的单元格和墙,橙色为列表中的墙,荧光色为通路)
# | E | # | # | # | # | # |
# | % | & | $ | # | ||
# | & | $ | $ | $ | $ | # |
# | $ | $ | # | |||
# | $ | $ | $ | $ | $ | # |
# | $ | $ | @ | |||
# | # | # | # | # | # | # |
3.随机选择一个墙(&),若墙对边单元格未访问,打通
# | E | # | # | # | # | # |
# | % | & | $ | # | ||
# | 通 | $ | $ | $ | $ | # |
# | $ | $ | # | |||
# | $ | $ | $ | $ | $ | # |
# | $ | $ | @ | |||
# | # | # | # | # | # | # |
4.将打通后连接的单元格从第2步开始重复
# | E | # | # | # | # | # |
# | % | & | $ | # | ||
# | $ | $ | $ | $ | # | |
# | % | & | $ | # | ||
# | & | $ | $ | $ | $ | # |
# | $ | $ | @ | |||
# | # | # | # | # | # | # |
# | E | # | # | # | # | # |
# | % | & | $ | # | ||
# | $ | & | $ | $ | # | |
# | % | % | & | # | ||
# | & | $ | & | $ | $ | # |
# | $ | $ | @ | |||
# | # | # | # | # | # | # |
5.此时选中的墙左右都访问过了(下图),将其从列表中移除
# | E | # | # | # | # | # |
# | % | & | % | & | # | |
# | $ | $ | $ | # | ||
# | % | % | & | # | ||
# | & | $ | & | $ | $ | # |
# | $ | $ | @ | |||
# | # | # | # | # | # | # |
6.重复上述过程
# | E | # | # | # | # | # |
# | % | $ | % | & | # | |
# | $ | $ | $ | # | ||
# | % | % | & | # | ||
# | & | $ | & | $ | $ | # |
# | $ | $ | @ | |||
# | # | # | # | # | # | # |
# | E | # | # | # | # | # |
# | % | $ | % | & | # | |
# | $ | $ | $ | # | ||
# | % | % | & | # | ||
# | $ | & | $ | $ | # | |
# | % | & | $ | @ | ||
# | # | # | # | # | # | # |
# | E | # | # | # | # | # |
# | % | $ | % | & | # | |
# | $ | $ | & | # | ||
# | % | % | % | # | ||
# | $ | & | $ | & | # | |
# | % | & | $ | @ | ||
# | # | # | # | # | # | # |
# | E | # | # | # | # | # |
# | % | $ | % | & | # | |
# | $ | $ | & | # | ||
# | % | % | % | # | ||
# | $ | $ | & | # | ||
# | % | & | % | & | @ | |
# | # | # | # | # | # | # |
# | E | # | # | # | # | # |
# | % | $ | % | & | # | |
# | $ | $ | & | # | ||
# | % | % | % | # | ||
# | $ | $ | & | # | ||
# | % | & | % | % | @ | |
# | # | # | # | # | # | # |
# | E | # | # | # | # | # |
# | % | $ | % | & | # | |
# | $ | $ | & | # | ||
# | % | % | % | # | ||
# | $ | $ | $ | # | ||
# | % | & | % | % | @ | |
# | # | # | # | # | # | # |
# | E | # | # | # | # | # |
# | % | $ | % | & | # | |
# | $ | $ | & | # | ||
# | % | % | % | # | ||
# | $ | $ | $ | # | ||
# | % | $ | % | % | @ | |
# | # | # | # | # | # | # |
# | E | # | # | # | # | # |
# | % | $ | % | % | # | |
# | $ | $ | & | # | ||
# | % | % | % | # | ||
# | $ | $ | $ | # | ||
# | % | $ | % | % | @ | |
# | # | # | # | # | # | # |
# | E | # | # | # | # | # |
# | % | $ | % | % | # | |
# | $ | $ | $ | # | ||
# | % | % | % | # | ||
# | $ | $ | $ | # | ||
# | % | $ | % | % | @ | |
# | # | # | # | # | # | # |
迷宫生成结束,整理一下结果:
# | E | # | # | # | # | # |
# | $ | # | ||||
# | $ | $ | $ | # | ||
# | # | |||||
# | $ | $ | $ | # | ||
# | $ | @ | ||||
# | # | # | # | # | # | # |
如果有其他不解之处或有可改进之处,欢迎通过邮箱(870585593@qq.com)联系我!
感谢阅读!
如果可以的话点个赞 分个享 关注一下 呗?:)
原文地址:https://www.cnblogs.com/nickwald/p/11373800.html
- Hadoop数据分析平台实战——130Hive Shell命令介绍 02(熟悉Hive略过)离线数据分析平台实战——130Hive Shell命令介绍 02(熟悉Hive略过)
- ECJTUACM16 Winter vacation training #4 题解&源码
- Hadoop数据分析平台实战——090HBase shell客户端和Java Api介绍离线数据分析平台实战——090HBase shell客户端和Java Api介绍
- Hadoop数据分析平台实战——140Hive函数以及自定义函数讲解离线数据分析平台实战——140Hive函数以及自定义函数讲解
- 深入理解树状数组
- Codeforces 712C Memory and De-Evolution
- Codeforces 712B Memory and Trident
- Hadoop数据分析平台实战——110Hive介绍和Hive环境搭建离线数据分析平台实战——110Hive介绍和Hive环境搭建
- 干货|普通反爬虫机制的应对策略
- python基础-字符串与编码
- Codeforces 708A Letters Cyclic Shift
- Codeforce 712A Memory and Crow
- 每日一水之strcmp用法
- HDU 3782 xxx定律
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Moriarty Corp靶场攻略
- Chatterbox(hack the box系列)
- 用云开发实现在线五子棋h5(含源码)
- Duo RDP双因素身份验证防护绕过
- Hackbar 2.3.1插件许可证限制绕过
- Linux系统下安装JDK
- MATLAB借助openai gym环境训练强化学习模型
- java作业篇,闰年,BMI
- 主题hondsome折腾,css修改
- typecho显示网站运行时间
- 从 Dagger 到 Hilt,谷歌为何执着于让我们用依赖注入?
- 为什么非对称加密比对称加密慢?
- 如何优化Nginx的处理性能
- 一键生成前后端代码,Mybatis-Plus代码生成器让我舒服了
- 各类好玩免费API推荐,强烈建议收藏