`

自动寻路算法(A*算法)分享

    博客分类:
  • java
阅读更多
一、为什么地图网格化?
位置描述:
鼠标位置使用像素坐标描述。
地图位置使用经度纬度描述。
为了方便描述地图上元素的位置,将地图网格化。

二、什么是曼哈顿距离?
曼哈顿距离(Manhattan distance):两点在南北方向上的距离加上在东西方向上的距离,即D(I,J)=|XI-XJ|+|YI-YJ|。
计算曼哈顿距离时,忽略两点之间的障碍物。
若有两点(1,2)和(3,4),则曼哈顿距离 = |3 -1| + |4 - 2| = 4

三、A*算法涉及的名词
开启列表:存放即将进行分析的可达位置。
关闭列表:存放已经分析完毕的可达位置。
估价函数:f(n) = g(n) + h(n)
f(n) 是从初始点经由节点n到目标点的估价函数。
g(n) 是在地图中从初始节点到n节点的实际代价 h(n) 是从n到目标节点最佳路径的估计代价。
h(n)是估计代价,可以使用曼哈顿距离作为估计代价。

四、A*算法步骤
1、将起始位置放入开启列表。
2、获取开启列表中F(n) 值(经由点n的估价值)最小的位置,且曼哈顿距离最小,作为当前位置。
3、判断当前位置是否为终点,若为终点,将终点放入关闭列表并执行第八步。
4、将当前位置从开启列表中移除,并放入关闭列表。
5、获取当前位置可达的位置。注意:关闭列表中的位置不可达。
6、将当前位置可达的位置放入开启列表。
7、若开启列表不为空,则从第二步继续循环。
8、若终点存在关闭列表,则返回路径,否则未找到路径。

五、A*算法优化
1、地图粒度没必要划分到像素点。像素点的划分粒度对于搜索来说代价太高。
      建议划分的粒度在不影响使用的情况下取最大值。
2、每次新位置放入开启列表时,给列表排序(建议选择快速排序算法),
      这样每次从开启列表取位置时,只取第一个位置即可。
      这种方式适用于超大地图,分支节点多的地图。
3、可以前进到相邻的对角线上的位置(8个方向)。建议使用8方向而非4方向。
      相邻对角线上位置的代价建议为1.4。
4、不同位置的损耗。在地图中,位置有两种状态,可通过和不可通过。
      但有的可通过位置可能移动代价更高,比如,堵车道路上的位置。
5、对于超级大的地图寻路,可以把大地图划分为N个小区域。先使用A*算法
      在N个小区域里找到路径,在路径上的每个小区域里再次使用A*算法找到
      最终的路径。
6、Dijkstra(狄克斯特拉)算法:该算法与A*算法区别在于估价函数, Dijkstra 算法
      没有h(n)。Dijkstra 算法每次迭代时选择的下一个顶点是标记点之外距离源点最
      近的顶点。但由于dijkstra算法主要计算从源点到其他所有点的最短路径,所以
      算法的效率较低。
      对于多个目标位置,建议采用Dijkstra算法。比如停车场有多个出口,需要找到离
      当前位置最近的出口。

-=各种=-寻路算法演示:
http://qiao.github.io/PathFinding.js/visual/
  • 31.zip (202.9 KB)
  • 下载次数: 2
  • 大小: 193.8 KB
分享到:
评论

相关推荐

    A*自动寻路算法实现(java)

    下载本程序仅可演示A*自动寻路算法实现(java),该程序是基于我写的网络版贪吃蛇基础上编写的(网络版贪吃蛇...wasd键控制太阳的方向,鼠标左击目的地,会根据A*自动寻路算法计算出一条最优路线,太阳按最优路线移动。

    A*走路 自动寻路A*算法 易语言源码优化版

    A*(A-star)算法是一种广泛应用的路径搜索算法,它在自动寻路系统中起着核心作用。易语言是一种中国本土开发的、面向对象的编程语言,它以其简单易学的特点受到很多程序员的喜爱。这个“A*走路 自动寻路A*算法 ...

    Python版的A*寻路算法

    4. **A*核心算法**: - 初始化:将起点加入开放列表,计算其F值。 - 循环:从开放列表中选择F值最小的节点,将其移到关闭列表。 - 邻接节点:检查该节点的所有邻接节点,如果未在关闭列表中,计算其G值和F值,...

    A*寻路算法 源码

    A*寻路算法(A* Pathfinding Algorithm)是游戏开发、地图导航、机器人路径规划等领域广泛应用的一种高效路径搜索算法。它结合了Dijkstra算法的全局最优性和BFS(广度优先搜索)的效率,通过引入启发式函数来指导搜索,...

    容易理解的寻路算法 A* 寻路 最短路径

    A*(发音为“A-star”)寻路算法是一种在图或网格中寻找从起点到终点最短路径的有效算法。这个算法结合了Dijkstra算法的全局最优性和Greedy最佳优先搜索的效率,尤其适用于游戏开发、地图导航等领域。下面将详细解释...

    FindPath 寻路算法 A*算法 A星算法

    《A*寻路算法详解与实现》 在游戏开发、地图导航、机器人路径规划等领域,寻路算法扮演着至关重要的角色。A*(A-Star)算法作为其中的明星算法,以其高效性和准确性受到广泛青睐。本文将深入探讨A*算法的基本原理、...

    封装好的寻路算法 A*算法

    A*(发音A-star)算法是一种在图形搜索中广泛应用的启发式搜索算法,它结合了Dijkstra算法的最短路径特性以及优先级队列的效率优势。在这个封装好的A*算法中,它被设计用于二维网格地图上的路径寻找,适用于游戏开发...

    VB A星寻路算法 a* AStar

    A星(A*)寻路算法是计算机图形学和游戏开发中的一个重要概念,特别是在路径规划和导航系统中广泛应用。VB(Visual Basic)是一种流行的编程语言,它以其直观易学的特性受到许多初学者和开发者喜爱。本篇文章将深入...

    a*寻路算法,c++类

    **A*寻路算法**是一种广泛应用的路径搜索算法,它结合了Dijkstra算法的最短路径特性以及优先级队列的效率,同时引入了启发式信息以提高搜索速度。在游戏开发、图形图像处理、地图导航等领域,A*算法被广泛用于计算两...

    A*算法范例自动寻路

    A*(A-star)算法是一种广泛应用的路径搜索算法,它在图形化游戏中尤其常见,用于实现智能角色的自动寻路功能。A*算法是Dijkstra算法的一种改进版本,通过引入启发式函数来提高效率,使其能在有限计算时间内找到最优...

    js算法之A*寻路算法

    用js写的实现的A*寻路算法(包含UI) 用js写的实现的A*寻路算法(包含UI)

    极度优化的A*寻路算法

    A*(A-star)寻路算法是一种广泛应用在游戏开发、地图导航、机器人路径规划等领域的图搜索算法。它结合了Dijkstra算法的最短路径保证和Greedy最佳优先搜索的效率,通过引入启发式函数来指导搜索过程,使得在有限计算...

    VB A星寻路算法 VB A*寻路算法

    VB 中的A星寻路算法 用了折半快速插入有序队列可以很快的添加结点数据 数组是以距离从大到小的一个有序队列 每次取数组中最后的数据,可以快速删除 例如:redim preserve A(ubound(A)-1)

    六边形A*寻路算法源码(As3版本)

    六边形A*寻路算法源码(As3版本)在六边形战棋类游戏中可以使用

    CocosCreator A*自动寻路demo

    本篇将深入探讨如何在CocosCreator中利用JavaScript实现A*自动寻路算法,并结合实际项目——"CocosCreator A*自动寻路demo"进行讲解。 A*(A-star)算法是一种启发式搜索算法,广泛应用于路径规划问题。其核心在于...

    a*算法 寻路算法 寻路寻路寻路寻路寻路寻路寻路寻路寻路寻路寻路

    **a*算法详解** a*(A-star)算法是一种在图形搜索中用于寻找从起点到终点最短路径的启发式搜索算法。它结合了Dijkstra算法的最优性和BFS(广度优先搜索)的效率,通过引入启发式函数来指导搜索方向,从而更快地...

Global site tag (gtag.js) - Google Analytics