首页
学习
活动
专区
圈层
工具
发布

【UE4】算法简记 - 地牢(1) DFS迷宫和BFS迷宫

本篇是基本的迷宫生成算法的介绍, 包含DFS法和BFS法, 下面是这篇文章主要的参考资料 总览, 介绍了几乎所有的程序式地图生成算法 Herbert Wolverson - Procedural Map...Generation Techniques https://youtu.be/TlLIOgWYVpI 介绍了最基础的三种PCG地图算法的详细流程 三套简单的迷宫地图生成方案 - 兔四的文章 - 知乎...效果 DFS迷宫, 整体比较规则 BFS迷宫 大致流程 使用二维整型矩阵来表示迷宫地图, 0为墙壁, 1为可达区域, 2为已到达区域 将地图矩阵根据某种规则初始化得到可达和不可达区域的组合....若是, 将这个可达区域连接扩展为迷宫的一部分, 然后从这个区域处刷新待选不可达区域列表 若否, 将这个不可达区域从列表中去除 重复直到不可达区域列表耗尽 借用一下算法示意图: ref: 三套简单的迷宫地图生成方案...BFS特性, 各个分支长度都近似, 因此看起来很混乱, 分叉很多不方便游玩 效果 BFS迷宫, 分岔路很多

1.1K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    学霸的迷宫(bfs)

    但学霸为了不要别人打扰,住在一个城堡里,城堡外面是一个二维 的格子迷宫,要进城堡必须得先通过迷宫。...因为班长还有妹子要陪,磨刀不误砍柴功,他为了节约时间,从线人那里搞到了迷宫的地图,准备提前计 算最短的路线。可是他现在正向妹子解释这件事情,于是就委托你帮他找一条最短的路线。...输入格式   第一行两个整数n, m,为迷宫的长宽。   接下来n行,每行m个数,数之间没有间隔,为0或1中的一个。0表示这个格子可以通过,1表示不可以。...假设你现在已经在迷宫坐 标(1,1)的地方,即左上角,迷宫的出口在(n,m)。每次移动时只能向上下左右4个方向移动到另外一个可以通过的格子里,每次移动算一步。...如果有多条长度相同的最短路径,选择在此表示方法下字典序最小的一个。

    88950

    迷宫中离入口最近的出口(BFS)

    题目 给你一个 m x n 的迷宫矩阵 maze (下标从 0 开始),矩阵中有空格子(用 '.' 表示)和墙(用 '+' 表示)。...同时给你迷宫的入口 entrance ,用 entrance = [entrancerow, entrancecol] 表示你一开始所在格子的行和列。...你不能进入墙所在的格子,你也不能离开迷宫。 你的目标是找到离 entrance 最近 的出口。 出口 的含义是 maze 边界 上的 空格子。entrance 格子 不算 出口。...请你返回从 entrance 到最近出口的最短路径的 步数 ,如果不存在这样的路径,请你返回 -1 。...所以,最近的出口为 (1,2) ,距离为 2 步。 示例 3: 输入:maze = [[".","+"]], entrance = [0,0] 输出:-1 解释:这个迷宫中没有出口。

    44220

    穿过迷宫的最少移动次数(状态压缩BFS)

    题目 你还记得那条风靡全球的贪吃蛇吗? 我们在一个 n*n 的网格上构建了新的迷宫地图,蛇的长度为 2,也就是说它会占去两个单元格。 蛇会从左上角((0, 0) 和 (0, 1))开始移动。...蛇需要移动到迷宫的右下角((n-1, n-2) 和 (n-1, n-1))。 每次移动,蛇可以这样走: 如果没有障碍,则向右移动一个单元格。并仍然保持身体的水平/竖直状态。...并仍然保持身体的水平/竖直状态。 如果它处于水平状态并且其下面的两个单元都是空的,就顺时针旋转 90 度。蛇从((r, c)、(r, c+1))移动到 ((r, c)、(r+1, c))。...如果它处于竖直状态并且其右面的两个单元都是空的,就逆时针旋转 90 度。蛇从((r, c)、(r+1, c))移动到((r, c)、(r, c+1))。 ? 返回蛇抵达目的地所需的最少移动次数。...解题 把尾巴的坐标 x,y 还有方向 d,三个信息编码成101进制数 然后蛇可以三种走法:前进、整体平移、绕尾巴旋转 class Solution { vector> dir

    77920

    浅析迷宫搜索类的双向bfs问题(附例题解析)

    前言 在搜索问题中,以迷宫问题最具有代表性,无论是八皇后的回溯问题,还是dfs找出口,bfs找最短次数等等题目的问题。在我们刚开始ac的时候、可能有着很多满足感!...不过bfs并不是万能的,具体问题要看迷宫的大小的,迷宫长宽没增加一个数,那么这个数量级增加是非常大的,因为搜索次数大概和边长的指数级别有关系。当然这里不详细介绍bfs了,大家可以看以前的一篇文章。...数据结构与算法—深度、宽度优先(dfs,bfs)搜索 双向bfs 什么样的情况可以使用双向bfs来优化呢?...其实双向bfs的主要思想是问题的拆分吧,比如在一个迷宫中可以往下往右行走,问你有多少种方式从左上到右下。 正常情况下,我们就是搜索遍历,如果迷宫边长为n,那么这个复杂度大概是2^n^级别....也就是如果18*18的迷宫如果使用直接搜索,那么大概2^18次方量级,而如果采用双向bfs,那么就是2^9这个量级。 ?

    1.7K20

    算法06-搜索算法-广度优先搜索

    BFS是一种完备策略,即只要问题有解,它就一定可以找到解。并且,广度优先搜索找到的解,还一定是路径最短的解。...问题 现在有一个4*4的迷宫,李雷在迷宫的左上角,迷宫出口在右下角,李雷体力有限,他希望尽快走出迷宫,请你告诉李雷最少需要走多少步(每个格子不能重复走动)。...迷宫的存储 迷宫的移动 搜索方式 1.我们需要使用队列(que)来实现,用一个结构体表示每次找到的点的坐标信息以及步数(x,y,cnt)。 2将起点入队。...下一个节点的坐标 // 下一个节点坐标不超出迷宫范围,未被走过,且不是障碍 if(nx>=1 && nx=1 &&ny循环 } } } } 图的广度优先遍历 题目描述 使用广度优先遍历算法输出访问结点的顺序

    76920

    常用的搜索算法之迷宫求解问题

    迷宫求解问题可以使用多种算法来解决,包括深度优先搜索(DFS)、广度优先搜索(BFS)、A*(A-star)算法、Dijkstra算法等。...这些算法通常基于图的遍历和搜索技术,通过访问并标记已经访问过的网格来避免重复搜索,并使用特定的策略来选择下一个要访问的网格。试图通过遍历迷宫的所有可能路径来找到从起点到终点的最短路径或一条可行路径。...出处 迷宫求解的算法和技术在计算机科学、机器人技术、游戏设计和人工智能等领域都有广泛应用。其理论基础源于图论和搜索算法。 定义 迷宫求解是指通过算法找到从迷宫起点到终点的路径的过程。...可扩展性:可以轻松地添加额外的规则或优化目标。 缺点: 可能需要很长时间:对于大型或复杂的迷宫,搜索算法可能需要很长时间才能找到解决方案。...Java示例代码 下面是完整的Java示例代码,包括迷宫的定义、邻居节点的获取方法以及BFS迷宫求解的实现: import java.util.*; class Point { int

    72710

    【深度优先搜索篇】走迷宫的魔法:算法如何破解迷宫的神秘密码

    一·前言: 1.1深度优先搜索概述: 基本思想: DFS 是一种用于遍历或搜索树或图的算法。...1.2走迷宫问题的应用场景: 问题描述: 走迷宫问题通常可以抽象为一个二维矩阵,其中某些单元表示墙壁(不可通行),其他单元表示通道(可通行)。目标是从起点找到一条到达终点的路径。...1.3DFS 解决走迷宫问题的实现步骤: 1.3.1数据结构准备: ①迷宫表示:使用二维数组 maze[m][n] 存储迷宫的布局,0 或 1 表示通道或墙壁。...1.4优缺点: 1.4.1优点: 简单直观:算法的实现相对简单,使用递归的方式易于理解和编写代码。...找到一条路径即可:如果只需要找到一条可行路径,DFS 可能会比广度优先搜索(BFS)更快,因为它会沿着一条路径一直探索下去,直到找到终点。

    71400

    数据结构课程设计

    在创建地图的过程中,我们需要随机地生成迷宫的墙壁和路径,为了实现这一功能,我们借助以time为随机数种子,尽量做到随机,然后利用循环遍历,用0或1对迷宫的每一个格子进行随机赋值,为使得迷宫在大部分情况下能够生成可解的状态...---- 2.3 迷宫可解性的判断和帮助求解的算法 ---- 在生成地图和用户需要帮助时,我们都需要使用某种方法来得到一个路径,使得该路径能够连接迷宫入口和出口。...当生成的迷宫非法时,利用循环不断的重新调用生成迷宫的模块函数,重新生成迷宫需要重置之前的MapVis,直到生成一个合法的迷宫为止。...我们利用循环遍历的方式进行输出,在循环遍历时检查迷宫每一个格子的状态,检查GameMap的值若为1,说明该处是墙壁,故直接输出■。...调用搜索模块函数前需要复制当前迷宫的地图信息和迷宫的地图状态信息,作为参数传入。 然后以当前坐标利用循环遍历偏移量数组,枚举四个方向即枚举下一步要走的格子。

    1.9K60

    dfs、bfs的终于弄明白了

    前言 你问一个人听过哪些算法,那么深度优先搜索(dfs)和宽度优先搜索(bfs)那肯定在其中,很多小老弟学会dfs和bfs就觉得好像懂算法了,无所不能,确实如此,学会dfs和bfs暴力搜索枚举确实利用计算机超强计算大部分都能求的一份解...广度优先搜素(bfs) 概念: BFS,其英文全称是Breadth First Search。BFS并不使用经验法则算法。从算法的观点,所有因为展开节点而得到的子节点都会被加进一个先进先出的队列中。...对于dfs一般解决的经典问题有: 二叉树的搜索遍历(非层序) 经典全排列、组合、子集问题 回溯算法之八皇后问题 迷宫搜索问题(能否找到) 其他图搜索 而bfs一般解决的问题有: 二叉树层序搜索遍历(各种变形例如分层输出...而今天在这里,我们谈谈双向bfs,体验一下算法的奥妙! 什么样的情况可以使用双向bfs来优化呢?...总结 dfs和bfs是图论中非常经典的搜索算法,两种算法的重要程度都非常高,这里面主要对其简单介绍,对于普通开发者,能够用dfs和bfs能够解决二叉树问题、迷宫搜索问题等基础简单的就够了(面试官不会那么骚难为你

    1.5K40

    蚂蚁走迷宫

    01 故事起源 有一只蚂蚁出去寻找食物,无意中进入了一个迷宫。蚂蚁只能向上、下、左、右4个方向走,迷宫中有墙和水的地方都无法通行。这时蚂蚁犯难了,怎样才能找出到食物的最短路径呢? ?...当然要排除之前走过的地方(不走回头路,走了也只会更长)和无法通过的墙和水。 ? 蚂蚁想,还好我会影分身。...03 问题建模 把迷宫地图放在二维数组中,能通行的地方为0,墙和水的地方为负数。 ? 每一步向4个方向走,可以通过当前坐标加上一个方向向量。 ? 这个其实就是宽度优先搜索(BFS)的思想。...04 宽度优先搜索(BFS) ? 又称广度优先搜索,优先向四周扩展子节点,是最简便的图的搜索算法之一,一般通过队列来实现。 ? 4.1 队列 ?...4.2 循环队列 把队列想象成一个首尾相接的环形。 ? 数组实现,需要多预留一个空间。

    2K50

    JavaScript 模块的循环加载

    "循环加载"(circular dependency)指的是,a脚本的执行依赖b脚本,而b脚本的执行又依赖a脚本。...但是实际上,这是很难避免的,尤其是依赖关系复杂的大项目,很容易出现a依赖b,b依赖c,c又依赖a这样的情况。这意味着,模块加载机制必须考虑"循环加载"的情况。...本文介绍JavaScript语言如何处理"循环加载"。目前,最常见的两种模块格式CommonJS和ES6,处理方法是不一样的,返回的结果也不一样。...二、CommonJS模块的循环加载 CommonJS模块的重要特性是加载时执行,即脚本代码在require的时候,就会全部执行。...这导致ES6处理"循环加载"与CommonJS有本质的不同。ES6根本不会关心是否发生了"循环加载",只是生成一个指向被加载模块的引用,需要开发者自己保证,真正取值的时候能够取到值。

    1.9K50

    算法基础篇:(十九)吃透 BFS!从原理到实战,解锁宽度优先搜索的核心玩法

    前言 在算法的世界里,搜索类算法是解决 “找路径、求最优” 问题的核心武器,而宽度优先搜索(BFS)更是其中的 “明星选手”—— 它凭借 “逐层扩展、最短路径” 的特性,成为处理边权为...:保证 “先进先出”,符合 BFS “逐层扩展” 的逻辑; 距离数组 dist:既标记是否访问,又记录最短距离,一举两得; 方向数组:把 “上下左右” 的移动转化为循环,简化代码; 提前退出:如果目标明确...二、BFS 经典例题实战 —— 从基础到进阶 光说不练假把式,接下来我们结合 4 道经典例题,一步步拆解 BFS 的应用技巧,从 “马的遍历” 到 “八数码难题”,难度由浅入深,带你吃透...核心思路是: 先用 BFS 求出起点到所有点的最短距离; 遍历整个迷宫,筛选出标记为 'e' 且距离不为 - 1 的位置,统计数量和最小值。...希望这篇文章能帮你打通 BFS 的任督二脉,下次遇到搜索问题,能第一时间想到 “用 BFS 是不是更优?”—— 这才是真正掌握了这一算法的精髓。

    35210

    BFS算法篇——打开智慧之门,BFS算法在拓扑排序中的诗意探索(下)

    引言 上篇我们介绍了BFS解决拓扑排序的背景知识,本篇我们将结合具体题目分析,进一步深化对于该算法的理解运用。...最终需要返回题目中外星词典的递增顺序,若不存在合法的顺序,则返回空 3.3 思路讲解: 我们通过比较相邻的单词,找出它们的第一个不同字母。这些字母的顺序关系就可以帮助我们构建字母的顺序图。...图的构建: 我们可以通过图来表示字母之间的顺序关系。每个字母是图中的一个节点,而字母之间的顺序关系是边。 拓扑排序: 通过拓扑排序的方法,我们可以得到字母的正确排序。...[a].insert(b); in[b]++;//更新边和入度节点 } break;//注意跳出循环...return ""; } }//判断是否存在不合法顺序 return ret; } }; 小结 本篇关于BFS

    11610
    领券