簡單描述下A 尋路

2021-09-29 15:11:46 字數 564 閱讀 5616

純文字總結,不會涉及具體**。

a*尋路,其實本質上就是dijkstra尋路的一種加料版。

所以,可以先看看什麼是dijkstra尋路。

此尋路中,連通的節點間存在著通過的消耗值(泥濘的土地消耗就比平坦的道具大)

而節點本身擁有乙個代表從起點到此節點本身之間所有的消耗值。

流程如下:

每次觀察當前節點周圍可抵達的節點,計算並賦予每個鄰居他的消耗總值(當前節點的總消耗加上通過的消耗),並把他們加入乙個待選集合(演算法從來沒有觀察到過的鄰居節點總是需要加入的,或者是第二次被當作了鄰居節點且花費比上次少時)(集合一般是優先佇列)

下一次從集合中拿出乙個總花費最少的節點,重複以上步驟(基於這樣乙個事實,當前可能的最佳路徑永遠是從當前花費最少的節點開始的),直到鄰居節點**現了終點。

而a*加料版只是在節點被加入待選集合時,給他再加上另乙個參考值,也就是該節點與終點橫縱座標的差的和。(直觀上過濾掉了明顯反向於終點的可選節點)

而所謂的廣度優先,深度優先搜尋,其實就是這種尋路的特化版:

不考慮權重且

廣度優先的待選節點集合為佇列 / 深度優先的待選節點集合為棧

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

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

python尋路 A 尋路演算法 python實現

coding utf 8 import math import cv2 as cv class point object def init self,position,parent self.position position self.parent parent self.f 0 self.g 0...

A 尋路演算法

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