簡體   English   中英

棋盤游戲尋路 - 找到多個最佳路徑

[英]Board game pathfinding - finding multiple optimal paths

我有一個非常簡單的尋路任務——一個在 8x8 網格上玩的棋盤游戲,每個方格要么可以通過,要么不能通過。 我正在尋找的是一種算法,它將為我提供從某個正方形 A 到正方形 B 的最佳 n 條路徑(假設有任何路徑)。

我一直在研究 A*,但據我所知,沒有明確的方法可以擴展它以找到不止一條路徑。

所以,關鍵是它給出的路徑實際上是最短的 n 條路徑,它不會遺漏任何一條。 效率也很重要。 有人可以提出一個合適的算法,或者指出我正確的方向嗎?

對於大多數此類情況,Dijkstra 是一個很好的算法,但由於您在 8x8 網格上,我將假設每個單元格之間的所有距離都相等且 static。 在這種情況下,BFS(廣度優先搜索)應該很適合您。

鑒於董事會規模較小,您應該考慮進行廣度優先的詳盡搜索。 8 x 8 意味着只有 64 個方格,x8 個移動(如果不允許對角線,則為 4 個),總搜索量非常小。

Dijkstra 可以很好地找到一條最短路徑。 要找到第二、第三……第 n 條最短路徑,您需要使用 Dijksta 算法的擴展。 一旦找到從 N1、N2、N3...Nx 的最短路徑,克隆該路徑上的所有中間節點以創建節點 N2' 到 Nx-1'。 克隆除 (N1,N2') 和刪除邊 (Nx-1,Nx) 之外的最短路徑上的所有進入邊。 將所有邊松弛到克隆路徑上的節點中,這現在表示從上一次迭代到最短路徑上的節點的第二快方法。

查看k-shortest paths ,一個開源實現,還包括一些參考。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM