博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【算法•日更•第三十七期】A*寻路算法
阅读量:5288 次
发布时间:2019-06-14

本文共 733 字,大约阅读时间需要 2 分钟。

▎写在前面

  这是一种搜索算法,小编以前总是念成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不一定需要最优。 

转载于:https://www.cnblogs.com/TFLS-gzr/p/11326567.html

你可能感兴趣的文章
.NET Framework框架介绍
查看>>
Git学习——Git分支篇(未完)
查看>>
MySql 修改中文乱码/ 表名不区分大小写
查看>>
C#代码怎样在Windows窗体中显示从数据库读出的图片
查看>>
effective c++ 7: Declare destructors virtual in polymorphic base classes
查看>>
ActionBar
查看>>
Ajax上传文件到C#Action中
查看>>
实现android上解析Json格式数据功能
查看>>
最短路算法--模板
查看>>
利用树莓派3搭建可以发射无线局域网的微型服务器
查看>>
Linux查看系统的基本信息
查看>>
eclipse jsp 文字设置
查看>>
Android--多线程之AsyncTask
查看>>
cxdbImage以及图像显示
查看>>
36、UI contrast and settings
查看>>
HDU 2070 Fibbonacci Number
查看>>
骰子作业
查看>>
C++虚函数与纯虚函数用法与区别(转)
查看>>
jq中的substring(x)和substring(x,y) 字符截取用法
查看>>
BNUOJ-22868-Movie collection(树状数组)
查看>>