尋路演算法之A

2021-07-14 18:43:58 字數 674 閱讀 8853

最近接觸到moba(multiplayer online battle arena)這個新名詞,發現npc尋路有點意思。於是回顧了一下經典的a*演算法。

open列表:記錄可用來被尋找的點

closed列表:記錄排除在路線之外的點

對於路線中的乙個點:

3.1 g值:從開始到此點的移動量

3.2 h值:從此點到終點的估計移動量,一般為不考慮障礙的最短距離。

3.3 f值:等於g+h,此值的含義是選取當前點的乙個評價值,即如果此值越小,表明選此點後,離終點越近。

初始化

將起點加入open列表

迴圈開始

從open列表取出乙個g+h值最小的點,並將此點加入closed列表

由於open列表中會有若干個具有同樣g+h值的點,為了快速,自己習慣在此引入dfs:優先選取其中g值較大的點

遍歷每乙個與此點相通的點:

如果此點在closed列表中,則跳過;

如果此點不在open列表中,計算相應的值,並將此點加入open列表;

如果此點在open列表中,檢查如果新的g+h值小於原值,則更新此點的g值與h值;

結束條件

直到終點從open列表中挑出。

**

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中是否有值,如果沒有則無法到達終點,結束尋路...

A 尋路演算法

問題 由於遊戲中尋路出了個小問題 玩家尋路到乙個死角後在那邊不停的來回跑,就是無法越過障礙物,就研究了下a 尋路演算法以解決這個問題 研究了幾天,自己寫了個demo這裡給出總結 原理 a 演算法給出的是權值最優的路徑而不是最短路徑 權值有f g h來表示 啟發式函式如下 f p g p h p h值...