A 尋路演算法

2022-03-11 19:17:41 字數 1506 閱讀 1530

一種用於尋找有效路徑的演算法。

乙個7×5大小的迷宮,綠色的格仔是起點,紅色格仔是終點,中間三個藍色格仔是牆。這裡對於a*尋路的描述做了很大的簡化。實際場景中可能會遇到斜向移動、特殊地形等等因素,有些時候需要對openlist中的方格進行重新標記。

遊戲的規則是從起點開始,每一步只能上下左右移動一格,且不能穿越牆壁。如何讓ai用最少的步數到達終點?

引入兩個集合和乙個公式:

openlist:可到達的格仔

closelist:已到達的格仔 

f=g+h :對格仔價值的評估,其中g代表從起點走到當前格的成本,也就是走了多少步,h代表從當前格走到目標格的距離(不考慮障礙)。f值越小越好。

第一步:把起點放入openlist

openlist:node(1,2)

第二步:找出openlist中f值最小的方格,即唯一的方格node(1,2)作為當前方格,並把當前格移出openlist,放入closelist。代表這個格仔已到達並檢查過了。

closelist:node(1,2)

第三步:找出當前格上下左右所有可到達的格仔,看它們是否在openlist當中。如果不在,加入openlist,計算出相應的g、h、f值,並把當前格仔作為它們的「父親節點」(為了確定最終路線)。

openlist:node(1,1) node(0,2) node(2,2) node(1,3)

closelist:node(1,2) 

round1 ~ 第一步:找出openlist中f值最小的方格,即方格node(2,2)作為當前方格,並把當前格移出openlist,放入closelist。代表這個格仔已到達並檢查過了。

openlist:node(1,1) node(0,2)  node(1,3)

closelist:node(1,2) node(2,2)

round2 ~ 第二步:找出當前格上下左右所有可到達的格仔,看它們是否在openlist當中。如果不在,加入openlist,計算出相應的g、h、f值,並把當前格仔作為它們的「父親節點」。

}//如果終點在openlist中,直接返回終點格仔

if (find(openlist, end) != null)

}//openlist用盡,仍然找不到終點,說明終點不可到達,返回空

return null;

}

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

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

A 尋路演算法

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

A 尋路演算法

a 演算法是靜態環境下求最短路徑的不二之選,由於是啟發式搜尋,比dijkstra 深搜廣搜要快的多啦。a 也算是我第一次接觸的移動機械人演算法,csdn上的科普文章也不少,但我作為乙個機械的小白,實現出來還是小有成就感滴。今天抽空和大家分享一下原始碼,開發環境win7 64 opengl vs201...