js版 A*尋路算法

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

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

F=G+H;

其中,F是從起點經過該點到達終點的總路程,G是起點到達該點的“已走路程”,H是該點到達終點的“預計路程”。

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

由於H是預計路程,則在計算H時將不考慮障礙點,直接計算H到終點的路程,通過行列差來計算得到。

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

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

本文爲了降低算法難度,因此限制了尋路條件爲四方向,後期可以加入斜方向的查找,即可以八方向尋路。

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

效果展示

GitHub開源

博文中的A*尋路算法已開源在GitHub上,希望與大家一起分享、改進!

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

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