A 演算法 遊戲開發中經常用到

2021-07-11 01:01:37 字數 1269 閱讀 1132

(a-star)演算法是一種靜態路網中求解最短路最有效的直接搜尋方法。

公式表示為: f(n)=g(n)+h(n),

其中 f(n) 是從初始點經由節點n到目標點的估價函式,

g(n) 是在狀態空間中從初始節點到n節點的實際代價,

h(n) 是從n到目標節點最佳路徑的估計代價。

保證找到最短路徑(最優解的)條件,關鍵在於估價函式h(n)的選取:

估價值h(n)<= n到目標節點的距離實際值,這種情況下,搜尋的點數多,搜尋範圍大,效率低。但能得到最優解。並且如果h(n)=d(n),即距離估計h(n)等於最短距離,那麼搜尋將嚴格沿著最短路徑進行, 此時的搜尋效率是最高的。

然後我們通過**結合的形式來解釋下,如下圖:

圖中有這麼幾個要點先需要了解

:1、類似迷宮圖,分開始節點(start)、障礙物、結束節點(end),我們需要從start節點探尋一條到end節點的路線

2、對於探尋的每一步,都會以當前節點為基點,掃瞄其相鄰的八個節點 

3、計算當前節點與start節點及到end的距離

4、計算出最短路徑

如果明白了上面的場景描述,下面就可以進行分析了。

在a*演算法中,核心思想是乙個公式,上面已經提到過:

f(n)=g(n)+h(n)

僅通過文字可能有些朋友不是很了解,下面我們就舉例說明:

以start節點為例,探尋相鄰的八個節點,且只能上下左右移動,每移動到鄰近的單元格,我們認為行走了乙個距離。

比如從start移動到a節點,就移動了兩個距離,從a節點移動到end節點(此時忽略障礙,僅計算距離)。

這時公式中的g(n)就可以理解為g(a)=2,h(n)就理解為h(a)=6, 

f(n)就是start節點到end節點的實際距離,公式描述為:f(a)=g(a)+h(a)=8。

於是就有了a節點的數字描述——f(n)位於左上方,g(n)位於左下方,h(n)位於右下方。

同理,可計算出f(b) = g(b) + h(b) = 1 + 5 = 6 

這時start相鄰的其它節點變都可以計算出來了

現在理念明白了,該如何實現呢?

可以通過對相鄰節點的便利及父節點的不斷巢狀來形成一條路徑。

比如我們把start相鄰的所有節點進行便利比較,選出f(n)最小的乙個節點(我們稱為x節點),並設定x節點的父節點為start節點,並以x節點為當前節點,再判斷x節點周圍的有效節點(如障礙物完全可以忽略),選出f(n)最小的節點後設定x節點為其父節點,依次類推,就形成了一條節點線,這個演算法也就完成了。(基於bfs演算法)

ios開發中經常用到xcode使用小技巧

內容比較分散,只說說一點常用的 1 開發中面臨同時開啟多用工程的情況,對於初學的同志們可能有點不習慣,我們可以使用快捷鍵來完成啟動乙個新的工程,shift command n 2 新建資料夾 command n 3 m檔案和.h檔案的快速切換,control command 上 下 4 怎樣快速啟動...

Eclipse 中經常用到的快捷鍵

eclipse 常用快捷鍵收集 2006年09 月29日星期五 12 00 ctrl 1 快速修復 最經典的快捷鍵 就不用多說了 ctrl d 刪除當前行 ctrl alt 複製當前行到下一行 複製增加 ctrl alt 複製當前行到上一行 複製增加 alt 當前行和下面一行互動位置 特別實用 可以...

Eclipse 中經常用到的快捷鍵

ctrl 1 快速修復 最經典的快捷鍵,就不用多說了 ctrl d 刪除當前行 ctrl alt 複製當前行到下一行 複製增加 ctrl alt 複製當前行到上一行 複製增加 alt 當前行和下面一行互動位置 特別實用,可以省去先剪下,再貼上了 alt 當前行和上面一行互動位置 同上 alt 前乙個...