关于A*算法

来源:互联网 发布:htc vive unity3d 编辑:程序博客网 时间:2024/05/21 09:04

看完了A* 算法的讲解,总结出来就是求F=G+H   然后直接dfs就完了。

我入门完全是看的这篇文章   http://www.360doc.com/content/16/1201/12/99071_610999046.shtml

这里面有很多很好的扩展,可惜该死的360doc不让我点进去……需要登陆……

我发现A* 算法的思想用途其实很广:

第k短路,据说A* + Dijkstra也是很好用的,…………

其实主要就是A* 的思想:

有两个集合:open list ,close list 后者里面是处理完了的节点。

这跟Tarjan,最短路问题,最小生成树都很像。

开始只有起点在open list 里面。不断从open list 里面选择F最小的(F=G+H),将这个节点V加入close list ,然后将所有V能到达的节点加入open list。

G是原点到V的距离(这里有一个小技巧:如果可以走正方形对角线,可以把正方形边设为10,对角线设为14.因为正常情况下对角线等于边的1.414倍,在没有特别高的精度要求下,10,14就够了)这个距离可以通过struct记录(struct node)然后每次松弛更新就行了。

H是V到终点的估算距离,我学的是Manhattan距离的方式:忽略所有的阻碍,只能走边,不能对角线。通过这样的估算方法,效率还是比较高的。


好了,我需要的差不多就这么多。

其它的还是留给星际争霸的技术部解决吧……

原创粉丝点击