關於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距離的方式:忽略所有的阻礙,只能走邊,不能對角線。通過這樣的估算方法,效率還是比較高的。


好了,我需要的差不多就這麼多。

其它的還是留給星際爭霸的技術部解決吧……

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章