// @Author sunwenbo
// 2024/4/14 20:13
package main
import "fmt"
// 编程一个函数,完成老鼠找出路
// myMap *[8][7]int 地图,保证是同一个地图,因此是引用类型
// i,j表示对地图的哪个点进行测试
func SetWay(myMap *[8][7]int, i int, j int) bool {
// 分析出什么情况下就找到出路了
// myMap[6][5] == 2
if myMap[6][5] == 2 {
return true
} else {
// 说明要继续找
if myMap[i][j] == 0 { //如果这个点是可以探测的
// 假设这个点是通的,但是需要探测上下左右
// 换一个策略,向右上
myMap[i][j] = 2
if SetWay(myMap, i+1, j) { // 下
return true
} else if SetWay(myMap, i, j+1) { // 右
return true
} else if SetWay(myMap, i-1, j) { //上
return true
} else if SetWay(myMap, i, j-1) { // 左
return true
} else { //走不通
myMap[i][j] = 3
return false
}
} else { //说明这个点不能探测,为1,是墙
return false
}
}
}
func listMap(myMap *[8][7]int) {
// 输出地图
for i := 0; i < len(myMap); i++ {
for j := 0; j < len(myMap[j]); j++ {
fmt.Print(myMap[i][j], " ")
}
fmt.Println()
}
}
func main() {
//先创建一个二维数组,模拟一个迷宫地图
// 规则
// 1. 如果元素的值为1,代表墙
// 2. 如果元素的值为0,代表路还没有探测过的路经
// 3. 如果元素的值为2,代表可以走通的路
// 4. 如果元素的值为3,代表曾经走过,但是是一条死路
var myMap [8][7]int
for i := 0; i < len(myMap); i++ {
for j := 0; j < len(myMap[0]); j++ {
if i == 0 || i == len(myMap)-1 || j == 0 || j == len(myMap[0])-1 {
myMap[i][j] = 1
}
}
}
myMap[3][1] = 1
myMap[3][2] = 1
将路堵死的情况下
//myMap[1][2] = 1
//myMap[2][2] = 1
fmt.Println("地图:")
listMap(&myMap)
fmt.Println("##################")
// 测试一下
SetWay(&myMap, 1, 1)
listMap(&myMap)
}