• 【算法•日更•第三十七期】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不一定需要最优。 

  • 相关阅读:
    线程唤醒
    以前、现在
    黑马程序员训练营基础测试
    流程图
    线程同步
    Thread联系
    Java线程
    Java中文件流笔记
    字符串习题
    匿名内部类
  • 原文地址:https://www.cnblogs.com/TFLS-gzr/p/11326567.html
Copyright © 2020-2023  润新知