golang廣度優先演算法 走迷宮

2022-04-08 08:05:54 字數 1346 閱讀 2940

廣度優先遍歷,走迷宮思路:

1、建立二維陣列,0表示是路,1表示是牆;建立佇列q,儲存可遍歷的點,q的第乙個元素為起始點

2、從佇列中取乙個點,開始,按上、左、下、右的順序遍歷周圍的點next,next點在陣列的範圍內,且值為0,則把next存入佇列q中,並在steps(行走記錄二維陣列)中記錄步數,該點周圍的四個點遍歷完後,從q中取下乙個點,重複以上步驟,直到q中沒有點或者當前點為終點為止

3、最後列印steps即為迷宮路線

//獲取臨近的點

func (p point) add(r point) point }//

判斷點是否在二維陣列中,並返回點的值

func (p point) at(grid int) (int, bool

)

if p.j < 0 || p.j >=len(grid[p.i])

return grid[p.i][p.j], true}//

點的遍歷順序,上、左、下、右

var dirs = [4

]point, , , ,

}func walk(maze

int, start, end point) int

q :=point

for len(q) > 0

for _, dir :=range dirs

if next ==start

if steps[next.i][next.j] == 0 && next.i <= end.i && next.j <=end.j }}

return

steps

}func readmaze(filename

string) int

}return

maze

}func main() , point)

for _, row :=range steps

fmt.println()}}

列印結果:

arr.in檔案內容

650

1000

0001

0010

1011

1000

1001

0100

0

Go語言 廣度優先演算法(走迷宮)

前言 最近在慕課網看了個視屏學習廣度優先演算法,通過這個演算法來計算出走出迷宮的最短路徑,因此在此記錄來加深自己對廣度優先演算法的理解。目錄一 什麼是廣度優先演算法?廣度優先演算法能做什麼?二 實現 三 最終結果 廣度優先演算法 breadth first search 同廣度優先搜尋,又稱作寬度優...

走迷宮 廣度優先搜尋演算法

假設有如下的迷宮 迷宮0 1000 0001 0010 1011 1000 1001 0100 0 其中0表示可走,1表示牆壁,只能按上下左右的方向走,請問從左上角走到右下角哪條路最短?這裡就以廣度優先搜尋演算法來探索走法。過程如下 下面給出php和go的示例 define maze file di...

廣度優先演算法 迷宮問題

與深度優先演算法不同的是,廣度優先演算法是先遍歷層級在前的元素再遍歷層級在後的元素,即再遍歷完第一層元素後,再依次遍歷第二層元素,依次類推。而深度優先演算法是從乙個節點出發依次遍歷下一層節點直到節點之後沒有後繼元素。定義乙個二維陣列 int maze 5 5 public class main,st...