- 目錄 -
迷宮遞迴
尚硅谷Golang課

迷宮遞迴

func SetWay(myMap *[8][7]int, a int, b int) bool {
	//a,b 表示對地圖的那個點測試

	//找到出口
	if myMap[6][5] == 2 {
		return true
	} else {
		//繼續找
		if myMap[a][b] == 0 { //可探測的點
			myMap[a][b] = 2            //踩上去了,再探上下左右,但是我知道要往下往右探
			if SetWay(myMap, a+1, b) { //下
				return true
			} else if SetWay(myMap, a, b+1) { //右
				return true
			} else if SetWay(myMap, a-1, b) { //上
				return true
			} else if SetWay(myMap, a, b-1) { //左
				return true
			} else { //死路
				myMap[a][b] = 3
				return false
			}
		} else { //不可探測的點
			return false
		}
	}
}
func main() {
	//定義地圖 1=牆壁 0=沒走過的點 2=通路 3=走過的死路
	var myMap [8][7]int

	//四周設置圍牆
	for i := 0; i < 7; i++ {
		myMap[0][i] = 1
		myMap[7][i] = 1
	}
	for i := 0; i < 8; i++ {
		myMap[i][0] = 1
		myMap[i][6] = 1
	}
	myMap[3][1] = 1
	myMap[3][2] = 1

	//看樣子
	for i := 0; i < 8; i++ {
		for j := 0; j < 7; j++ {
			fmt.Print(myMap[i][j], " ")
		}
		fmt.Println()
	}

	SetWay(&myMap, 1, 1)
	fmt.Println("已探完")

	for i := 0; i < 8; i++ {
		for j := 0; j < 7; j++ {
			fmt.Print(myMap[i][j], " ")
		}
		fmt.Println()
	}
}

上次修改於 2021-09-01

此篇文章的評論功能已經停用。