关于A*算法

看完了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距离的方式:忽略所有的阻碍,只能走边,不能对角线。通过这样的估算方法,效率还是比较高的。


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

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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值