通過沒有障礙的迷宮路徑搜尋

假設我們有以下 4 乘 4 格:

StackOverflow 文件

讓我們假設這是一個迷宮。但是,沒有牆壁/障礙物。我們只有一個起點(綠色方塊)和一個終點(紅色方塊)。我們還假設為了從綠色變為紅色,我們不能對角移動。所以,從綠色方塊開始,讓我們看看我們可以移動到哪個方塊,然後用藍色突出顯示它們:

StackOverflow 文件

為了選擇移動到下一個方格,我們需要考慮 2 個啟發式:

  1. g 值 - 這個節點離綠色方塊有多遠。
  2. h 值 - 這是該節點離紅色方塊的距離。
  3. f 值 - 這是 g 值和 h 值的總和。這是告訴我們要移動到哪個節點的最終數字。

為了計算這些啟發式演算法,我們將使用這個公式:distance = abs(from.x - to.x) + abs(from.y - to.y)

這被稱為 曼哈頓距離 公式。

讓我們計算綠色方塊左邊的藍色方塊的 g 值:abs(3 - 2) + abs(2 - 2) = 1

大! 我們得到了價值:1。現在,讓我們嘗試計算 h 值:abs(2 - 0) + abs(2 - 0) = 4

完善。現在,讓我們得到 f 值:1 + 4 = 5

因此,該節點的最終值為 5

讓我們對所有其他藍色方塊做同樣的事情。每個正方形中心的大數字是 f 值,而左上角的數字是 g 值,右上角的數字是 h 值:

StackOverflow 文件

我們計算了所有藍色節點的 g,h 和 f 值。現在,我們選哪個?

無論哪個具有最低的 f 值。

但是,在這種情況下,我們有 2 個具有相同 f 值的節點,5。我們如何在它們之間進行選擇?

簡單地說,要麼隨機選擇一個,要麼設定優先順序。我通常喜歡這樣的優先順序:“右>上>下>左”

其中一個 f 值為 5 的節點將我們帶入向下方向,另一個帶我們向左。由於 Down 的優先順序高於 Left,因此我們選擇了 Down 的方塊。

我現在標記我們計算啟發式的節點,但沒有移動到橙色,我們選擇的節點為青色:

StackOverflow 文件

好的,現在讓我們為青色節點周圍的節點計算相同的啟發式:

StackOverflow 文件

同樣,我們選擇從青色節點向下的節點,因為所有選項都具有相同的 f 值:

StackOverflow 文件

讓我們計算青色節點唯一的鄰居的啟發式:

StackOverflow 文件

好吧,因為我們將遵循我們一直遵循的相同模式:

StackOverflow 文件

再一次,讓我們計算節點鄰居的啟發式:

StackOverflow 文件

我們搬到那裡:

StackOverflow 文件

最後,我們可以看到我們旁邊有一個勝利的廣場,所以我們搬到那裡,我們就完成了。