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

  • 相关阅读:
    在maven项目中引用ueditor报错问题
    mysql主从复制
    Nginx+tomcat负载均衡配置
    SSM框架——使用MyBatis Generator自动创建代码
    mysql定时任务用到存储过程和定时任务
    ajax跨域请求のJSONP
    mysql中把一个表的数据批量导入另一个表中
    在Mysql中查询两个时间段的差,可以是秒,天,星期,月份,年...
    input框的输入限制
    java项目启动时执行指定方法
  • 原文地址:https://www.cnblogs.com/TFLS-gzr/p/11326567.html
Copyright © 2011-2022 走看看