我目前正在試圖實現在C++中使用A * A *尋路:http://www.policyalmanac.org/games/aStarTutorial.htm沒有對角線移動
不過,對於第一個版本,我決定不包括對角線移動。
在C點的總結部分,在那裏它循環檢查當前點的鄰居:
for each neighbour of the current square (above, below, left, right)
if neighbour on closed list or not walkable {
continue
}
if neighbour not in open list {
add to open list
set parent of neighbour to current square
update F, G, H values
} else if neighbour is on open list {
check to see if this path to that square is better,
using G cost as the measure. A lower G cost means that this is a better path.
If so, change the parent of the square to the current square,
and recalculate the G and F scores of the square.
}
如果我只允許4方向的運動,我仍然需要檢查G值,看是否該廣場的路徑更好?例如,從起點開始,起點的所有4個鄰居將具有相同的g。
如果我沒有記錯,所有的直接鄰居都有相同的g成本,但是如果你的目標位於你所在位置的西北斜向,那麼從西或北鄰居開始的路徑的g成本將低於g成本如果你是從東方或南方鄰居開始的話。 – mrogers
@NicoSchertler那麼我應該檢查具有最低g成本的鄰居嗎?然後將該平方的父元素設置爲當前平方並重新更新值? – PrimateJunkie
A *算法的步驟不會根據集合中的項目數量(當前單元格的鄰居)而改變。你甚至可以在地圖上有鄰居清除的蟲洞/傳送器(除了相鄰的單元格外),A *仍然可以工作。 –