A*算法个人理解

A*
  • A*的核心在于F=G+H这个公式,他本身是一个距离评判公式,G是从起点到指定点的消耗,H是从指定点到终点的距离,这个距离忽略对角线,也忽略障碍物。
  • 我们首先将平面用网格划分,至于用正方形划分还是用正六边形划分,看情况。
  • 然后有两个集合OpenList与CloseList
  • 每个节点都有自己的GHP三个数据,可以建立一个结构体,
  1. 这是一个递归的过程,将起点相邻的格子【忽略障碍物】放置到OpenList并设置父节点然后将起点放置到CloseList
  2. 再依次计算OpenList里面的F,并获得里面F值最小的格子。放置到ClosedList——当前格子
  3. 【注意,OpenList是需要检查的列表,CloseList是不需要检查的列表】
  4. 然后将与该格子相邻的节点,忽略障碍物,也忽略已经放置到CloseList里面的物体,放置到OpenList当中并设置父节点,如果该节点已经存在于OpenList当中,那就比较G值,即通过当前格子到达该点的G值和直接到达该点的G值是否更小,如果更小,就改变P值,重新计算F
  5. 一直计算下去,最终到达终点的时候,然后依次获取上一级的P值,就可以得到一个路径。
关键点
  • H本身忽略了障碍物等因素,因此只是一个近似的模糊值。只有G这个值是精确的。
  • 我们每次将一个节点四周的节点放置到OpenList中,然后计算这几个点的F,最小值就是大概最短路径上的点
  • 比较G值就是类似于一个矫正的过程,因为F值的计算没有考虑障碍物,但是在第3步加入OpenList的时候忽略了障碍物,因此相当于把该节点四周的可达点放置进来
  • 如果该点已经在OpenList当中,就说明从起点到该点也是一个可达路径,这个时候就需要根据G值比较,应该选择哪一个。
  • 并更改P值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值