迷宫算法

深度优先算法的核心是(翻译的维基):
1、将起点作为当前格并标记
2、当还存在未标记的格时
——1、如果当前格有未标记的邻格
————1、随机选择一个未标记的邻格
————2、将当前格入栈
————3、移除当前格与邻格的墙
————4、标记邻格并用它作为当前格
——2、反之,如果栈不空
————1、栈顶的格子出栈
————2、令其成为当前格
——3、反之,随机选择一个格子为当前格并标记

通俗的说,就是从起点开始随机走,走不通了就原路返回,从下一个能走的地方再开始随机走。

随机prim算法的核心是(翻译的维基):
1、让迷宫全是墙
2、选一个格作为迷宫的通路,然后把它的邻墙放入列表
3、当列表里还有墙时
——1、从列表里随机选一个墙,如果它对面的格子不是迷宫的通路
————1、把墙打通,让对面的格子成为迷宫的通路
————2、把那个格子的邻墙加入列表
——2、如果对面的格子已经是通路了,那就从列表里移除这面墙

通俗的说,就是在所有可以走的地方上随机挖洞,创造出新的可以走的地方。

参考链接:

https://en.wikipedia.org/wiki/Maze_generation_algorithm

https://en.wikipedia.org/wiki/Talk:Maze_generation_algorithm

时间: 2025-02-01 14:49:37

迷宫算法的相关文章

扒一扒Prim迷宫算法

不可预知性是所有事件之源头 ——某位哲学家 本文主题:Prim算法可以吃吗 引入问题 小明家后面的公园准备开张啦!公园建筑方为了美观,准备修建一个纯天然不添加的迷宫.已知迷宫为15*15,四围除出入口外都围了墙(如下图) 迷宫 #  E  #  #  #  #  #  #  #  #  #  #  #  #  #  #                           #  #                            #  #                           

数据结构迷宫算法实现c语言

迷宫问题求解是一个非常经典的算法问题,该问题要求程序能根据用户的输入的长和宽去初始化迷宫,接着给用户提供两个选择,用户可以选择在迷宫里手动或自动生成指定个数的障碍,接着程序会自动找到一条能够从入口走到出口的路径,并且输出该路径 下面开始分析,因为迷宫是由多个点组成的,那么要实现上述功能,我们可以定义一个结构体去存放每个点的横纵坐标去表示位置,还需要用到一个二维数组去存放迷宫,在迷宫里有三种状态,0代表通路,1代表障碍,2代表已经走过的路,那么可以将指定的值一一赋给数组中每个元素,迷宫里的点是需要

修改后的迷宫算法(原版为http://blog.csdn.net/sunshinedabby/article/details/6284779)

// maze.cpp : 定义控制台应用程序的入口点. // #include<stdafx.h> #include<iostream> using namespace std; struct PosType//迷宫坐标位置类型 { int x;//行值 int y;//列值 }; #define MAXLENGTH 100 //设迷宫的最大行列为25 typedef int Mazetype[MAXLENGTH][MAXLENGTH];//迷宫数组 //全局变量 Mazetyp

简单迷宫算法(递归与非递归C++实现)

假定迷宫如下:1代表墙,0代表道路,起点在(1,1),终点(11,9)(PS:下标从0开始计算). 现在寻求一条路径能从起点到达终点(非最短). 有两种解法:递归与非递归. 递归算法思路: 要用递归,就要寻找一个子问题,该子问题是递归的.很明显,这道题的子问题就是从8个方向(上下左右还有四个斜角)中寻找一个可行方向并向前走一步,该子问题(seekPath函数)的实现代码如下: 1 struct offset{ 2 int x; 3 int y; 4 }; 5 offset move[8]={{-

【小白学游戏常用算法】一、随机迷宫算法

现在的很多游戏中的地图一般采用格子的方式,虽然在表面地图上无法看到实际的格子,但是在地图的结构中专门有一个逻辑层,这个层和地图大小相等,划出很多小的格子,然后在可以通过的地方使用0表示,在有障碍的且不能通过的地方用1或者其他数字表示(如图所示).有了这个逻辑层之后,实际上自动寻路就转换成了如何在一个二维数组中找出一条从逻辑值为0的地点移动到目标的路径.在寻路之前,我们首先要随机生成这些地图.     游戏中地图  二维数组逻辑层 本质上,地图的障碍逻辑层是由一个二维数组保存的.障碍标记在二维数组

迷宫算法——验证迷宫的可通性

[Qboy原创] 记得在大学学习数据结构时就学过采用迭代方式可以判断一个迷宫是否有解无解甚至可以查找出所有的可能的出口.目前公司开发一个游戏需要玩家去搭建迷宫让其他玩家去闯迷宫的游戏,游戏其实很简单.但是有一个重点就是要验证玩家所搭建的迷宫是否可到达.好吧这就是我们接下去算法的需求.写下此文只是为了Mark过程. 首先先创建必须的结构体 (1)迷宫中所有的节点类型 typedef enum{ EMPTY=0, //空白 OBSTACLE, //障碍 ENTER, //入口 EXIT, //出口

java实现迷宫算法--转

沿着所有方向进行探测,有路径则走,没有路径则从栈中回退. 回溯法是一种不断试探且及时纠正错误的搜索方法,下面的求解过程采用回溯法.从入口出发,按某一方向向前探索,若能走通(未走过的),即某处可以到达,则到达一个新点,否则试探下一个方向:若所有的方向均没有通路,则沿原路返回前一点,换下一个方向继续试探,直到所有可能的通路都搜索到,或找到一条通路,或无路可走又返回到入口点.这里可以用一个栈来实现,每走一步,将该位置压入栈中,若该点无路可走,则出栈返回上一位置.需要解决的四个问题:(1)表示迷宫的数据

数据结构与算法4: 经典问题之迷宫问题(Maze path)

数据结构与算法4: 经典问题之迷宫问题(Maze path) 写在前面 本节实践了教材[1][2]的两种经典迷宫算法.注意体会栈的运用.如果有改进意见请帮助我. 1.迷宫问题直观感受 下面给出迷宫问题的一个直观感受图,引入图只是为了帮助直观理解,这里不涉及OpenGL等其他绘图内容. 下图中棕色代表通道阻塞,白色代表可用通道,红色代表起始位置,绿色代表当前位置,黄色代表出口. (采用C++ 和OpenGL 绘制,目前是2D版本,3D版本有空时再补上) 迷宫1: 迷宫2: 2.迷宫算法 2.1 迷

Java数据结构之回溯算法的递归应用迷宫的路径问题

一.简介 回溯法的基本思想是:对一个包括有很多结点,每个结点有若干个搜索分支的问题,把原问题分解为对若干个子问题求解的算法.当搜索到某个结点.发现无法再继续搜索下去时,就让搜索过程回溯(即退回)到该结点的前一结点,继续搜索这个结点的其他尚未搜索过的分支:如果发现这个结点也无法再继续搜索下去时,就让搜索过程回溯到这个结点的前一结点继续这样的搜索过程:这样的搜索过程一直进行到搜索到问题的解或搜索完了全部可搜索分支没有解存在为止. 该方法可以使用堆栈实现.也可以使用递归实现,递归实现的话代码比较简单,