a star演算法 list,減少遍歷的開銷

2021-06-25 13:44:46 字數 691 閱讀 1585

上一節,已經把a-star基本思想實踐了一下,但是有個問題,就是慢

這一篇,使用list儲存openlist

看上次的**

function loop()

var fvalue=openlist[0].f;

var currenttile=null;

var openlistkey=0;

for(var key in openlist)

}closetile(currenttile);

openlist.splice(openlistkey,1);

checkneighbourtile(currenttile);

}

從openlist裡面找到乙個f值最小的tile,上次用的是陣列,插入的時候也是隨便插入的,所以,裡面是亂序的,先找到最小的,必須遍歷整個openlist,每一次loop都遍歷,如果地圖很大,開銷也會很大, 所以優化點可以用list代替陣列,然後插入的時候按照大小插入,這樣整個list是按照f值從小到大的

每次loop就可以只要第乙個節點,這樣可以節省很多不必要的迴圈開銷

1.優化使用鍊錶儲存openlist

2.在tile身上儲存是不是open,或者是不是close

3.修復一些bug

A star演算法優化二

本文目的是對a 尋路演算法所生成的路徑進行一些人性化的調整,使其看起來不至於太機械化。關於a 演算法的原理與實現,讀者可以閱讀其他資料,這裡不再詳細闡述。a 尋路演算法本質上是乙個有方向性的廣度優先搜尋演算法,它使用乙個估價函式,來估測可能的最短路徑,在每一次搜尋迭代完成後,選取其鄰接點中最優的乙個...

演算法 Astar尋路演算法改進

早前寫了一篇 rcp gef智慧型尋路演算法 a star 出現了一點問題。在astar演算法中,預設尋路起點和終點都是n x n的方格,但如果用在路由上,就會出現問題。如果,需要連線的終點並不在方格的四角上,就產生了斜線。於是我們可以對終點附近的點重新做一點兒處理,原始碼如下所示 int size...

基於c 的A star演算法

資料 一 基礎原理 1 從起點開始,向周圍八個方向擴充套件。測試新擴充套件的點的路徑代價,路徑代價由已走的路徑和距離終點的期望加和而成。這個路徑代價是選擇路徑的標準。2 有兩個表open close。close 生成並且考察過的點,存在兩種點。一種是當前選擇的路徑,是最終想要的結果。另一種是考察但沒...