二、最小生成树算法之Prim算法

数据结构中的Prim算法是先将一个顶点加入集合,寻找与其最近的顶点加入集合,然后依次寻找与这两个顶点中最近的顶点加入集合,以此类推直到所有顶点都被访问到。

由于迷宫中所有边的权都相同,且生成迷宫需要随机性,所以寻找最近顶点这一步就变为:

随机选取集合中某一顶点,检索其相邻顶点是否被访问过,如果全部被访问过,将这个顶点移除集合,如果尚存在未被访问过的顶点,就随机选择其中一个并连接它们。

最终形成的迷宫如图

由于准备阶段在上一篇文章中已阐述过,本篇只列出算法函数

void Prim()
{int x = 0, y = 0;vector<Map*>rode;//使用向量容器作为集合rode.push_back(start);//start作为根map[x][y]->val = 1;//标记访问过的顶点while (!rode.empty()){Sleep(0);int select = rand() % rode.size();//从集合中随机选取一个顶点x = rode[select]->x;y = rode[select]->y;int v = visit(x, y);if (v == 0){rode.erase(rode.begin()+select);//如果该顶点的相邻顶点全部被访问过,移除它}else{//以下代码为从可访问的顶点中随机选取一个vector<int>put;if (v % 10 == 1)put.push_back(UP);if (v % 100 >= 10)put.push_back(DOWN);if (v % 1000 >= 100)put.push_back(LEFT);if (v >= 1000)put.push_back(RIGHT);int choose = rand() % put.size();//以下代码把要移除的墙涂白if (put[choose] == UP){solidrectangle(x*(RODE + WALL) - RODE / 2, y*(RODE + WALL) - RODE / 2 - WALL, x*(RODE + WALL) + RODE / 2, y*(RODE + WALL) - RODE / 2);y--;}else if (put[choose] == DOWN){solidrectangle(x*(RODE + WALL) - RODE / 2, y*(RODE + WALL) + RODE / 2, x*(RODE + WALL) + RODE / 2, y*(RODE + WALL) + RODE / 2 + WALL);y++;}else if (put[choose] == LEFT){solidrectangle(x*(RODE + WALL) - RODE / 2 - WALL, y*(RODE + WALL) - RODE / 2, x*(RODE + WALL) - RODE / 2, y*(RODE + WALL) + RODE / 2);x--;}else if (put[choose] == RIGHT){solidrectangle(x*(RODE + WALL) + RODE / 2, y*(RODE + WALL) - RODE / 2, x*(RODE + WALL) + RODE / 2 + WALL, y*(RODE + WALL) + RODE / 2);x++;}//将它们互相加入对方的相连顶点集合中rode[select]->push(map[x][y]);map[x][y]->push(rode[select]);//把新顶点加入集合rode.push_back(map[x][y]);map[x][y]->val = 1;}}
}

可以看到最后寻到的路并不曲折

迷宫生成算法(二)(C++)相关推荐

  1. 迷宫生成算法和迷宫寻路算法

    迷宫生成算法和迷宫寻路算法 大学二年级的时候,作为对栈这个数据结构的复习,我制作了一个迷宫生成算法的小程序,当时反响十分好,过了几天我又用自己已经学的DirectX技术制作了DirectX版的程序.这 ...

  2. 迷宫生成算法---深度优先算法(基于python)

    迷宫生成算法---深度优先算法 总体的目录 版权及协议声明 更加舒服的阅读方式 一. 深度优先算法的原理与思路 二.迷宫的制作 迷宫的总体的创建. 三.代码的实现 总体的目录 版权及协议声明 本文章遵 ...

  3. 随机迷宫生成算法浅析

    摘要 本文对随机迷宫生成进行了初步的研究和分析,并给出了两种不同的生成算法.最终的算法结合了图的深度优先遍历.通过对比两种算法之间,可发现,在实际问题中,结合了离散数学的方法往往非更有效率且效果更佳. ...

  4. c语言 迷宫深度遍历 算法,图的遍历迷宫生成算法浅析

    1. 引言 在平常的游戏中,我们常常会碰到随机生成的地图.这里我们就来看看一个简单的随机迷宫是如何生成. 2. 迷宫描述随机生成一个m * n的迷宫,可用一个矩阵maze[m][n]来表示,如图:   ...

  5. [迷宫中的算法实践]迷宫生成算法——Prim算法

    普里姆算法(Prim算法),图论中的一种算法,可在加权连通图里搜索最小生成树.意即由此算法搜索到的边子集所构成的树中,不但包括了连通图里的所有顶点(英语:Vertex (graph theory)), ...

  6. C#三大迷宫生成算法

    今天介绍一下很经典的三大迷宫算法的C#实现,即随机普利姆算法,深度优先算法和十字分割(也就是递归分割算法).实现参考了[ActionScript 3] 三大迷宫生成算法一文(生成的迷宫预览图也使用的该 ...

  7. 随机迷宫生成算法——深度优先算法

    迷宫是我们小时候经常玩的游戏,如何用代码来快速生成上面这种迷宫呢? 迷宫算法有三大算法:深度优先算法.prim算法和递归分割算法.这里用的是深度优先算法,在此说一下算法思路,希望对各位有所帮助. 首先 ...

  8. 随机迷宫生成算法——prime算法

    本以为Prime迷宫生成算法和图论的Prime算法有什么关联,貌似并没有. Prime迷宫生成算法的原理: (1)初始地图所有位置均设为墙 (2)任意插入一个墙体进墙队列 (3)判断此时墙体是否可以设 ...

  9. HTML+CSS+JavaScript 迷宫生成算法 【建议收藏】

    最近发现很多人都在写算法类的博客,今天就献丑了使用HTML,CSS和JavaScript制作一个简单的迷宫生成小代码.证明了自己对一些简单的小算法还是可以驾驭的,基本功没有荒废. 迷宫生成有很多种算法 ...

  10. android迷宫生成算法,【Unity算法实现】简单回溯法随机生成 Tile Based 迷宫

    算法学习自 作者eastecho 在IndieNova上发表的文章 简单的使用回溯法生成 Tile Based 迷宫 , 我只是简单做了一下Unity的实现. 基础算法的简单说明 简单说明一下算法步骤 ...

最新文章

  1. 使用juggle简化网络编程
  2. 具体分析Struts工作流程
  3. Android-ConvenientBanner轻松实现广告头效果
  4. javac编译出现“找不到符号”和软件包不存在的解决
  5. 怎样更好地使用快捷键?
  6. 成功解决AttributeError: ‘Series‘ object has no attribute ‘name’
  7. Oracle区概念总结
  8. java 控制jsp_JSP学习之Java Web中的安全控制实例详解
  9. c6011取消对null指针的引用_COM编程攻略(二十二 IDL中的枚举,指针,数组)
  10. 阿里云、腾讯云、UCloud 、华为云云主机对比测试报告
  11. Yann LeCun送你的春节大礼:免费学习全部2020春季深度学习课程
  12. 07_封装丶静态和工具类
  13. 急需能临时发邮件的临时邮箱 临时邮箱怎么注册 邮箱163注册入口在哪
  14. C语言 栈的应用 :火车的调度(软硬座)
  15. win10电脑怎么清理电脑内存
  16. 人类刚给火星送去Linux系统,以及一款安卓手机芯片
  17. 让你的工作事半功倍的语音转文字转换器
  18. J9数字论:区块链+DAO3:去中心化的互联网世界
  19. .net core 使用 Hangfire 实现定时、延时任务
  20. 学习通信原理之——从实验中理解频谱/功率谱/功率谱密度(MATLAB演示)

热门文章

  1. 我爬取交通学博士分享的GIS资源
  2. java文件实现文件的上传和下载
  3. iOS开发脚踏实地学习day15-画板
  4. 电信9530手机上面使用移动的SIM卡
  5. 逻辑回归原理与sklearn实现
  6. C#窗体程序随电脑分辨率自动调整大小
  7. 【小说】MR设备普及后的生活
  8. 中文用户名改为英文只要3步复制黏贴
  9. ElasticSearch排序引起的all shards failed异常
  10. 副号显示无服务器,小升初||网报遇BUG,最全解决方案都在这里了