廣度優先遍歷,走迷宮思路:
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檔案內容
6501000
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...