关于矩形迷宫地图的数组化处理和相应寻路算法的思考

article/2025/3/11 9:09:47

目录

矩形地图的数组化

思路

提取实现

实现过程

(1)特征

(2)取点问题

(3)需要确定的变量值

(4)另外的

(5)适用的迷宫类型

寻路算法

数组迷宫的特点

数组迷宫的缺点

 算法

 数组迷宫的DFS思路算法

思路

DFS算法的劣势

数组迷宫的BFS与泛洪填充思路算法

思路

注意事项

实现过程

数组迷宫的A*算法

与BFS的相关性

思路

可能的迷宫算法

总结


矩形地图的数组化

  • 思路

对于某个矩形的迷宫地图,机器的处理首先要进行地图信息的获取和压缩,也就是把地图的特征提取为精简的方便处理的形式。而地图的黑白信息天然的可以作为1和0的信息方便计算机做出判断。

由此可以想到是否可以将地图做成使用1和0表示的形式,并转换后也需要拥有信息点的坐标信息或者坐标位置可以进行映射变换,因此二维数组应该是比较适合的迷宫转换形式。

总结说,利用好迷宫某位置灰度值对应到二维数组的1/0值,创建数组迷宫,从而进行下一步处理。

提取实现

对于一个矩形的迷宫,墙和路的长度都可以以某单位长度进行取值。此单位长度应该与多种需求有关,如迷宫车大小与迷宫道路关系、路口或连续弯路的斜线走法。显而易见的,在此单位长度中其实一个点的值便可以代表出该位置的情况,因此原则上该某单位长度在地图上的取值不应当跨特征。

由此我们有了对实际迷宫进行处理的实现方式。取点操作,以该点的情况代替范围内的相同情况。相邻两点间的距离就是单位长度。

图中示例取点,取出所有的红线交叉点的值以来代表迷宫情况

实现过程

(1)特征

我们选择取该点的灰度值作为特征,黑色为墙白色为路。由此,我们通过灰度的取值和灰度的阈值设置便可以抽象出一张二维数组迷宫,以上地图的处理结果如下:

(2)取点问题

A. 我们将地图进行取点操作时,不难看到因为墙的像素值过窄,取点操作时的微小偏差可能就会导致取点的位置出错。我们不妨对图像进行膨胀操作,通过加大墙的像素宽度,以来抵消取点时的偏差问题。

B. 我们在取点时,点的位置和多少,应该根据迷宫车的大小与迷宫的关系(在一条直线道路里的走法(能多方向移动或只能前后)),迷宫的几方向走法(路口或连续弯路的斜线走法)有关。原则上应该取出最简单的二维数组迷宫以来最好的进行后续操作。

单边点数=迷宫单边长/单路宽*2+1

(3)需要确定的变量值

A. 因为是平分迷宫地图来进行取点,可以借助for循环来取固定像素点位置的灰度值因此需要确定:a. 第一个点的x轴像素位置 b. 第一个点的y轴像素位置 c. 最后一个点的x轴像素位置 d. 最后一个点的y轴像素位置

B. 地图中某些目标点的对应数组迷宫位置。通过特征判断出地图中目标点位置,在取特征点的灰度值时加入判断该点是否位于目标点中,以此来对应出地图到数组的映射位置。a. 目标点的像素特征值

(4)另外的

由于识图时迷宫的边界是固定的值,不妨只取迷宫内部的特征,在生成迷宫的过程中通过循环添加迷宫的边界墙。

(5)适用的迷宫类型

适用于矩形的任何迷宫。二维数组化的迷宫均可实现提取,但要根据寻路任务要求和具体需求来确定取点的规则


寻路算法

数组迷宫的特点

(1)数组迷宫之于寻路相关处理的优势在与可以通过简单的循环、判断等操作确定数组地图的某个点的情况,并可以简单的完成映射转换的过程。

(2)数组迷宫的特征明显,处理时能很简单的识别道路并且做出相应的判断

数组迷宫的缺点

迷宫的情况极度依赖地图的识别准确度,有一个特征位置的识别错误可能就会导致迷宫失效

 算法

 数组迷宫的DFS思路算法

  • 思路

由于走路和身边环境的判断变得简单。只需要控制数列随时记录当前的行进位置,改变走过的道路作为墙,在无路可走时再选择倒退操作便能很简单的实现寻路功能

  • DFS算法的劣势

找到的道路长短,难易度不可控,对道路的探索顺序受制于程序中的转向先后顺序,只能做到找到解,但最优解普通的DFS算法无所实现。

数组迷宫的BFS与泛洪填充思路算法

思路

数组迷宫的便利性使得对迷宫道路的赋值操作变得非常方便,于是我们便可以轻易的在所有的道路(未被赋值)上标记出该点走到终点的所需要步数,从而通过递减数列找到起终点之间的最短路线。

在实际迷宫问题中,从终点开始倒着寻找出口是一种常用的简易的解决迷宫问题的方法,在该方法中也可以使用这种思路。从迷宫的目标点开始,向外对迷宫道路进行递增赋值。以来找到到达该点的正确道路。

注意事项

BFS中,应该判断道路赋值操作到达起点时就停止,进而可保证从起点开始走出的递减数列时唯一的而且是最短的。

还应注意,目标点的值,道路的值,墙的值与道路价值的赋值之间的关系。如目标点为2,道路为0,墙为1,则道路的赋值应该从3开始递增,反向找到入口位置。寻路时从入口开始根据递减找到2就是找到了目标。

实现过程

进行赋值时可以随时在另一数列中追踪被赋值的坐标,以来从此坐标再进行下一步赋值操作,这也得益于数组化迷宫的便利性。

数组迷宫的A*算法

与BFS的相关性

A*算法可以看做BFS的优化版,不再向所有方向进行赋值,而是对最有可能的方向进行赋值操作。进而优化在对迷宫进行赋值时所需要的运算,提升速度

思路

在赋值操作进行后,可以先分析场上所有的赋值位置,他们对于起点的距离(曼哈顿距离、欧氏距离),即可能性。只挑选出场上可能性最大的位置进行赋值操作。而对于:可能性大而无法继续赋值的位置等情况进行标记,不再对该位置再次计算以避免浪费资源。

可能的迷宫算法

洪水填充(未探索)、左手原则(对目标在中心的、有独立墙壁的无效)等

总结

各种算法各有优劣,搜索速度上,走出迷宫的速度上各有不同。同时有些算法可能会对某种含有特殊结构的迷宫失效,在选择算法时应该选择适合该迷宫的算法。


http://chatgpt.dhexx.cn/article/ke76byR5.shtml

相关文章

C#迷宫Winform小游戏,生成可连通的迷宫地图

上一篇本人已经写了一个控制台小游戏,这次使用Winform来生成可连通的地图,并测试运行游戏 迷宫小游戏控制台 一、先更改控制台游戏的一点点代码,用于测试迷宫是否连通的【即:从起点可以到达终点】。只用更改 MazeUtil.cs的查找路…

迷宫游戏|自动寻径|随机生成迷宫地图|UI|闯关|地图反转

MazeGame 遵循开源协议 MIT 开发工具及运行环境 开发IDE环境 : Visual Studio 2019 代码管理工具: Git 开发语言:C 程序运行环境(开发环境为(Windows10)其他兼容性未知) 依赖库 EasyX 图形界面库 EasyX官网:EasyX Git仓库地址 Gitee:Gitee 仓库 Github:h…

Java程序:迷宫地图生成器

Java程序:迷宫地图生成器 1、运行效果 可以在【0,50】之间随意设置行数和列数,比如设置为25行25列的迷宫地图数组。 迷宫地图的每一个方格,如果是白色,单击就变成黑色,如果是黑色,单击就变成白色。黑色对应数组里的1,白色对应数组里的0。 因为没有采用路径搜索算法来设…

Java 开发实例(第3篇),绘制迷宫1 生成迷宫地图

开发环境: 操作系统Win10。 1.下载Java 15,提取码:soft 2.下载软件 Eclipse 2020-12,提取码:soft 下载本博客的实例工程代码,提取码:soft 前天2月9日在逛B站App时,意外看到一个很…

Python 打印迷宫地图小游戏

在实现玩转小迷宫这个游戏时,分别使用了input()输入函数、print()输出函数、if…elif…else语句、二维列表、while循环、for循环 下面对这些用法再一次重温 1.input()输入函数 在 Python 中,使用内置函数 input() 可以接收用户的键盘输入。input() 函数…

html5的canvas绘制迷宫地图

canvas标签一直是html5的亮点,用它可以实现很多东西。我想用它来绘画像迷宫那样的地图。借助到的工具有瓦片地图编辑器tiled(点击跳转到下载链接)。 如图:如果你想要画像这样的迷宫地图,如果不用canvas,可以通过dom操作拼接一个一个div,以达成这个效果。那样是不是很不合…

深度优先,Kruskal,Prim几种方式生成迷宫地图

小时候玩过一款3D版迷宫,那时还是功能机时代,黑白界面拼凑的伪3D效果还是给我带来了很多快乐。后来出现了智能机,却再也没找到过那样纯粹的迷宫游戏。总算自己找时间做一个出来。 本文主要介绍一下深度优先,Kruskal,Prim几种方式生…

二维数组随机生成地图迷宫_经验分享:三套简单的迷宫地图生成方案

文/兔四 概述:文章基于一种基础的地图,来讨论三套不同的地图生成方案。 文章不会出现跟代码相关的内容,会以较为通俗的语句和不少简单的示意图来表示迷宫的生成方案。其中不少方法来自于游戏界前辈,我根据自己的基础地图做了不少修正(毕竟迷宫和地图的形式多种多样,适合自…

算法自动生成迷宫地图

文章目录 前言一、什么是(DFS)深度优先算法?深度优先算法实现步骤1.引入库2.初始化参数3.Turtle画方格函数4.开始生成数组并调用Turtle画图 二、什么是(BFS)广度优先算法?广度优先算法实现步骤1.引入库2.初…

【工具篇】Unity迷宫地图生成器MazeSpawner随机迷宫信手拈来

目录 一.迷宫生成效果 二.使用流程 三.使用场景 四.源码地址 一.迷宫生成效果 二.使用流程 1.导入后结构目录如下,打开prefab文件夹找到MazeSpawner放进场景里面

C++实现随机生成迷宫地图自动完成寻径

#include<iostream> #include<stack> #include<vector> using namespace std;template<class T> class Maze { public:Maze( //默认参数值pair<int, int> initSize make_pair(15, 17),pair<string, string> initStyle m…

Python 制作迷宫游戏(一)——地图

Python 制作迷宫游戏&#xff08;一&#xff09;——地图 序 作为一个迷宫类的游戏&#xff0c;其最重要的是什么&#xff1f;当然是它的地图啦♪(∇*) 那么我们又该如何制作一张迷宫地图呢⊙(・◇・)&#xff1f; 很显然&#xff0c;我们不可能一张张自己画吧 网络上常见的迷…

三套简单的迷宫地图生成方案

地图基础 地图的形式很多&#xff0c;这里我使用的地图是以tile块为单位分割的地图&#xff0c;地图上的tile块形式很多&#xff0c;但主要分成三种&#xff1a; A&#xff1a;陆地&#xff0c;可以在上面分布一些角色啦物件啦&#xff1b; B&#xff1a;过渡&#xff0c;根据物…

SenticNet情感词典介绍

在进行情感分析时&#xff0c;一个好的情感词典能够让我们的工作事半功倍&#xff0c;较为出名的情感词典有SentiWordNet&#xff0c;General Inquirer等&#xff0c;这篇博客将介绍另外一个出色情感词典&#xff0c;SenticNet。 简介 当谈论SenticNet时&#xff0c;我们正在…

中文金融领域情感词典构建

2019年10月4日-6日 Python爬虫与文本分析工作坊 & 课题申报高级研修班 这篇文章是公众号关注者郝童鞋今早发给我的&#xff0c;在此谢谢郝童鞋。 文章基于简单算法和人工判断&#xff0c;使用多阶段剔除法&#xff0c;构建了 中文金融情感词典CFSD&#xff08;ChineseFinan…

《学术小白的学习之路 02》情感分析02 之基于大连理工情感词典的情感分析和情绪计算

本文主要是学习参考杨秀璋老师的博客,笔记总结。 原文链接 文章目录 书山有路勤为径&#xff0c;学海无涯苦作舟原文链接一.大连理工情感词典二、七种情绪的计算2.1 pandas读取数据2.2 导入大连理工大学中文情感词典2.3 统计七种情绪的分布情况2.4 增加中文分词词典和自定义的停…

中文情感词典的构建

首先&#xff0c;国外英文的情感分析已经取得了很好的效果&#xff0c;得益于英文单词自身分析的便捷性与英文大量的数据集 WordNet。但由于中文的多变性&#xff0c;语义的多重性与数据集的缺乏&#xff0c;使得国内的情感分析暂落后于国外。本文将记录博主在项目中构建情感词…

基于情感词典的网络文本情感倾向分类模型

目录 前言一、模型构建1.归类2.判定3.输出 二、代码实现三、结果展示 前言 文本情感倾向性分析&#xff08;也称为意见挖掘&#xff09;是指识别和提取原素材中的主观信息&#xff0c;并对带有感情色彩的文本进行分析处理和归纳推理的过程。主要用于实时社交媒体的内容&#xf…

使用SO-PMI算法构建行业/专业情感词典

文章目录 1. 情感词典内容2. 情感倾向点互信息算法&#xff08;SO-PMI&#xff09;算法点互信息算法 PMI情感倾向点互信息算法 SO-PMI 3. 构建情感词典1. 导入项目2. 构建情感种子词3. 使用TF-IDF方便构建情感种子词4. 构建专业词典的效果与使用方法5. 其他说明 1. 情感词典内容…

在微雕中使用的电脑设计

需求是我们要在铜器上复刻很小的凹印,可以选用的技术方案还是很多:激光雕刻,篆刻、钢印。 激光雕刻有利有弊,前期复制是最方便的,激光雕刻有专门的设计软件,可以很轻松的把自己的图案运用到机器上去。制作和时间的成本都非常的低,但是激光对金属的雕刻有一个大大的缺点…