【算法•日更•第三十七期】A*寻路算法

▎写在前面

  这是一种搜索算法,小编以前总是念成A乘寻路算法,没想到一直念错。

  请大家都念成A星寻路算法,不要像小编一样丢人了。

▎A*寻路算法

『引入』

  

 

  相信大家都或多或少的玩过一些游戏吧,那么游戏中的这些AI角色是如何实现自动追踪玩家的呢?

  难道是用普通的搜索吗?这种东西似乎有点太慢了,还没有过去就已经被玩家给打趴下了。

  那么我们应该找到一种快速的办法,于是A*算法便有了用武之地。

『定义』

A*算法,A*(A-Star)算法是一种静态路网中求解最短路径最有效的直接搜索方法,也是解决许多搜索问题的有效算法。算法中的距离估算值与实际值越接近,最终搜索速度越快。(copy自百度)

『特点』

  没有别的,就是快(也简单)。

『算法核心』

  比如说我们的AI角色站在绿色方块上,需要移动到红色方块,每次只能上下左右方向移动一格:

  

  我们需要维护两个集合:分别是openlist和closelist,openlist表示还没有到达的可能会去的点的集合,closelist表示已经到达的点的集合。

  同时还有一个公式F=G+H。G是已经走过的路的代价,H是还需要的代价(无视障碍)。那么F就是对这个点的评估值,每次选最小的F格子走。

  那么举个栗子吧,下一步是这样走的:

  

  上面的是F,下面的两个分别是G和H的值,我们只需要找小的F值就可以了。

  当然是这么走了:

  

  然后重复操作即可。


▎这个算法为什么平时不用?

  正确性无法保证:因为这样不一定是最优的,对于竞赛来说是不可取的,而AI不一定需要最优。 

posted @ 2019-08-09 13:04  c1714-gzr  阅读(169)  评论(0编辑  收藏  举报