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