js版 A 尋路演算法

2021-07-10 17:48:56 字數 672 閱讀 8768

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

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

f=g+h;

其中,f是從起點經過該點到達終點的總路程,g是起點到達該點的「已走路程」,h是該點到達終點的「預計路程」。

文字規定只能橫豎(四方向)尋路,那麼設定g=1,那麼如果計算h的值?

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

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

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

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

a*尋路演算法的具體實現,詳見**。

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

開源位址 

js實現A 尋路演算法

onload function cc.log this.searchroad map,0,0,4,4 傳入變數屬性,起始點座標和目標的座標。整個 執行後,列印出的是起始點到目標點最近路徑的座標 其中的map.arr是二維陣列 searchroad function map,start x,start...

js演算法之尋路

演算法流程說明 說明 起始節點記作s,目標節點記作e,對於任意節點p,從s到當前節點p的總移動消耗記作gp,節點p到目標e的曼哈頓距離記作hp,從節點p到相鄰節點n的移動消耗記作dpn,用於優先順序排序的值f n 記作fp 選擇起始節點s和目標節點e,將 s,0 節點,節點f n 值 放入openl...

迷宮尋路(A星尋路演算法)

題目 假設我們有乙個7 5大小的迷宮,如下圖所示,綠色格仔表示起點,紅色的格仔表示終點,中間的3個深灰色格仔表示障礙物。請找到一條從起點到終點最短的路徑。解題思路 需要引入兩個集合和乙個公式,如下 具體步驟 把起點放入openlist 檢查openlist中是否有值,如果沒有則無法到達終點,結束尋路...