!!(5月27日)发现一个很牛的东东,可以加深理解A* http://qiao.github.io/PathFinding.js/visual/
去年的这个时候和同学一起玩code vs asia的比赛学会了A*算法
当初在数据结构算法什么都不懂的情况下,我们能写出A*算法已经感觉非常满足了
当初用java进行实现的,那个时候脑袋里就只想着能实现就好,于是那个神奇的A*就被我们迷迷糊糊的写出来了
下面就想着高兴呢,也没仔细想过整体的流程,那里可以有优化的地方。虽然整体实现了,但是细节方面简直是令人发指
时隔一年,玩acm再次碰到了那个相似的使用A*算法的情况。于是凭借着我寥寥无几的数据结构知识外加蹩脚的c,c++语言使用
写出了一个自我感觉比以前java实现的优化了那么一点点的A*算法
接下来正题:
如果你清楚A*算法但是不知道怎么实现,我这里可能稍微给你一点帮助
如果你不清楚A*算法,可以先去学一下,网络上有很多比较好的文章,这里我就不多做讲解了
A*堆优化方式:A*算法利用了一个估价函数,计算图上节点的时候,对节点进行了整体的估价
然后选出最优的节点进行访问,以此类推...
既然是选择最优的节点,那么我们就可以实现一个优先队列。来方便我们取出最优的节点。所以使用堆就成了我们优化的不二选择
把能访问的节点加入我们的开放队列(堆形式),取出F最小的节点,然后访问与这个节点相连的节点,并且把满足条件能访问的加入
开放列表,如果满足条件并且已经加入到开放列表中了,那么就比较其

本文介绍了A*算法的基本原理,并探讨了如何通过使用堆数据结构进行优化,以提高寻找最短路径的效率。作者分享了自己在ACM比赛中应用A*算法的经验,以及如何使用堆作为优先队列,维护F值最小的节点,同时通过哈希图快速判断节点是否存在,从而减少时间复杂度。最后,作者给出了简单的二维平面图示例和代码片段。
最低0.47元/天 解锁文章
1万+

被折叠的 条评论
为什么被折叠?



