A*尋路算法

對於初學者而言,A*尋路已是個比較複雜的算法了,爲了便於理解,本文下降了A*算法的難度,規定只能橫豎(四方向)尋路,而沒法直接走對角線,使得整個算法更好理解。css

簡而言之,A*尋路就是計算從起點通過該點到達終點的路程,並使得總路程達到最小值,所以引入一個公式:html

F=G+H;git

其中,F是從起點通過該點到達終點的總路程,G是起點到達該點的「已走路程」,H是該點到達終點的「預計路程」。github

文本規定只能橫豎(四方向)尋路,那麼設置G=1,那麼若是計算H的值?算法

因爲H是預計路程,則在計算H時將不考慮障礙點,直接計算H到終點的路程,經過行列差來計算獲得。.net

A*算法的核心就是按照這個公式逐步查找,直到查找到終點,算法引入開啓列表和關閉列表,用於存儲被開啓和關閉的節點。htm

初期,地圖上的節點都是未開啓也未關閉的初始狀態,當檢測到一個節點時,就要將其周圍節點存入開啓列表中,經過計算父節點到各子節點的F值來檢測,選取子節點中F值最小的節點放入關閉列表中,並將該節點的父節點改成目前的檢測點(即該節點成爲以後節點的父節點),而後開始查找下一個節點,如此循環,直到查找到終點。get

本文爲了下降算法難度,所以限制了尋路條件爲四方向,後期能夠加入斜方向的查找,便可以八方向尋路。iframe

A*尋路算法的具體實現,詳見代碼。it

效果展現

GitHub開源

博文中的A*尋路算法已開源在GitHub上,但願與你們一塊兒分享、改進!

開源地址 https://github.com/twobin/AStarPathFinding

相關文章
相關標籤/搜索