A* 寻路

2024-05-13 06:58
文章标签 寻路

本文主要是介绍A* 寻路,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

定义


寻路步骤

  1. 从起点A开始,把它作为待处理的方格存入到一个开启列表(开启列表就是一个等待检查方格的列表)
  2. 寻找起点A周围可以到达的方格,将它们存入到开启列表,并设置它们的父方格为A
  3. 从开启列表中删除起点A,并把A加入到关闭列表(关闭列表中存放的是不需要再次检查的方格)
  4. 从开启列表中选择 F 值最低的方格,进行移动,把最低的方格设置为当前点,设置当前点的父方格为 A,假设为P
  5. 把点 P 从开启列表中删除,并放到关闭列表中
  6. 检查点 P 所有相邻并且可以到达(障碍物和关闭列表的方格都不考虑)的方格,如果这些方格还不在开启列表中,则将它们加入到开启列表中,再分别计算这些方格的G H F 值,并设置它们的父方格为 P
  7. 如果某个相邻方格 D 已经在开启列表中,检查如果用新的路径(经过P点的路径)到达D的话,G的值是否会更低一些,如果新的 G 值更低,那就把它的父方格改为目前选中的方格 P,然后重新计算它的 F G值;但是如果新的 G 值比较高,就说明经过 P 再到达 D 不是一个正确的选择,此时我们什么也不做;

从开启列表中查找最靠谱的方块,需要通过公式 F=G+H 去计算; G 表示从起点 A 移动到网格上指定方格的移动耗费 (可沿斜方向移动).
H 表示从指定的方格移动到终点 B 的预计耗费 (H 有很多计算方法, 这里我们设定只可以上下左右移动).

伪代码

把起始格添加到 "开启列表"
do
{寻找开启列表中F值最低的格子, 我们称它为当前格.把它切换到关闭列表.对当前格相邻的8格中的每一个if (它不可通过 || 已经在 "关闭列表" 中){什么也不做.}if (它不在开启列表中){把它添加进 "开启列表", 把当前格作为这一格的父节点, 计算这一格的 FGHif (它已经在开启列表中){if (用G值为参考检查新的路径是否更好, 更低的G值意味着更好的路径){把这一格的父节点改成当前格, 并且重新计算这一格的 GF 值.}}
} while( 目标格已经在 "开启列表", 这时候路径被找到)
如果开启列表已经空了, 说明路径不存在.最后从目标格开始, 沿着每一格的父节点移动直到回到起始格, 这就是路径.

代码分析


启发值设计
具体实现
地图表示

github上有是实现代码,可以下载

这篇关于A* 寻路的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/984993

相关文章

Python QT实现A-star寻路算法

目录 1、界面使用方法 2、注意事项 3、补充说明 用Qt5搭建一个图形化测试寻路算法的测试环境。 1、界面使用方法 设定起点: 鼠标左键双击,设定红色的起点。左键双击设定起点,用红色标记。 设定终点: 鼠标右键双击,设定蓝色的终点。右键双击设定终点,用蓝色标记。 设置障碍点: 鼠标左键或者右键按着不放,拖动可以设置黑色的障碍点。按住左键或右键并拖动,设置一系列黑色障碍点

斯坦福UE4 C++课学习补充25:寻路EQS

文章目录 一、创建EQS二、修改行为树三、查询上下文 一、创建EQS 场景查询系统EQS:可用于收集场景相关的数据。然后该系统可以使用生成器,通过各种用户定义的测试就这些数据提问,返回符合所提问题类型的最佳项目Item。 EQS的一些使用范例包括:找到最近的回复剂或弹药、判断出威胁最大的敌人,或者找到能看到玩家的视线 参考链接:https://dev.epicgames.c

A*算法解决迷宫寻路问题

A*算法解决迷宫寻路问题 问题描述 下图是一个迷宫,试为机器人找一条从Start到End的最短路径设计一搜索算法 设计思路 a)状态空间的表示 首先将迷宫图转换为列表形式呈现,每个格子用 (横坐标,纵坐标,上通路状态,下通路状态,左通路状态,右通路状态)来表示,通路状态用1或0表示,可通过为1,不可通过为0。比如起点(1,1),假定不能从起点出去,所以(1,1)可以走下或走右,所以第一格

【游戏跨场景寻路】基于egret(白鹭)的游戏地图跨场景寻路功能的实现

每次时间久了算法就会淡忘,温故耗时,故做下整理,方便日后取材。 参考网址:         原理性讲解:https://www.toutiao.com/a6540828594954830340/          基于as3的代码:https://blog.csdn.net/sjt223857130/article/details/77199601         堆优化理解:https:

寻路算法 A* 广度优先 深度优先

一般的游戏中都会有寻路算法,在我学程序的这几年里,或多或少有意无意的接触到,虽然我目前的项目中并不需要设计相关的寻路算法,但作为致力于成为独立游戏开发者的我,总是要学习的~~因为,将来的某一天,肯定会用到。   以前就很好奇,一个网游RPG,那些任务引导是怎么让玩家去找到对应的NPC,还有在地图上点一个点,玩家就会自动找到不错的方式去到达目标点,其中如果遇到障碍是跳起来,还是费起来,还是绕过去

Unity中初步使用Navmesh寻路系统

效果demo: 一、新建测试场景 测试场景:新建空Navmesh作为路径的容器 二、设置导航路径 在可以通过的物体上勾选Navigation Static,代表参与到导航的烘焙。 进行烘焙,点击bake按钮,场景出现蓝色的导航网格即代表成功。 三、设置某些不可走的地方 四、添加小人,挂上NavMeshAgent组件 五、利用这个组件控制小人的移动 usin

一篇写的比较简单的A*寻路算法(转)

http://www.raywenderlich.com/zh-hans/21503/a%E6%98%9F%E5%AF%BB%E8%B7%AF%E7%AE%97%E6%B3%95%E4%BB%8B%E7%BB%8D 这篇文章还可以在这里找到 英语 If you're new here, you may want to subscribe to my RSS feed or follow

人工智能: 自动寻路算法实现(三、A*算法)

前言 本篇文章是机器人自动寻路算法实现的第三章。我们要讨论的是一个在一个M×N的格子的房间中,有若干格子里有灰尘,有若干格子里有障碍物,而我们的扫地机器人则是要在不经过障碍物格子的前提下清理掉房间内的灰尘。具体的问题情景请查看人工智能: 自动寻路算法实现(一、广度优先搜索)这篇文章,即我们这个系列的第一篇文章。在前两篇文章里,我们介绍了通过广度优先搜索算法和深度优先算法来实现扫地机器人自动寻路的

人工智能: 自动寻路算法实现(二、深度优先搜索)

前言 本篇文章是机器人自动寻路算法实现的第二章。我们要讨论的是一个在一个M×N的格子的房间中,有若干格子里有灰尘,有若干格子里有障碍物,而我们的扫地机器人则是要在不经过障碍物格子的前提下清理掉房间内的灰尘。具体的问题情景请查看人工智能: 自动寻路算法实现(一、广度优先搜索)这篇文章,即我们这个系列的第一篇文章。在上一篇文章里,我们介绍了通过广度优先搜索算法来实现扫地机器人自动寻路的功能。在这篇文

人工智能: 自动寻路算法实现(一、广度优先搜索)

前言 随着人工智能技术的日益发达,我们的生活中也出现了越来越多的智能产品。我们今天要关注的是智能家居中的一员:扫地机器人。智能扫地机器人可以在主人不在家的情况下自动检测到地面上的灰尘,并且进行清扫。有些更为对路线进行规划,找到可以清理灰尘的最短路径,达到省电的效果。当然,绕过障碍物也是必须拥有的技能。我们今天就来看一下扫地机器人自动寻路的算法的简单实现。这里我们不对机器人如何识别出灰尘进行讨论,