go迷宫案例

package main

import (
    "fmt"
)

func setWay(myMap *[8][7]int, i int, j int) bool {
    //先假定一个出路
    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 { //说明这个点不能探测
            return false
        }
    }
}

//迷宫练习
func main() {
    //创建一个二维数组,模拟迷宫
    var myMap [8][7]int //构建迷宫地图 0.是没有走过的点 1.是墙;2.是出路;3.是走过的路,死路
    //1.先把地图的最上和最下设置 为1
    for i := 0; i < 7; i++ {
        myMap[0][i] = 1
        myMap[7][i] = 1
    }
    //2.在把地图最左边和右边设置为1
    for i := 0; i < 8; i++ {
        myMap[i][0] = 1
        myMap[i][6] = 1
    }

    //3.设置几个障碍
    // myMap[1][2] = 1
    // myMap[2][2] = 1
    myMap[3][1] = 1
    myMap[3][2] = 1

    //4.输出地图
    for i := 0; i < 8; i++ {
        for j := 0; j < 7; j++ {
            fmt.Print(myMap[i][j], " ")
        }
        fmt.Println()
    }
    fmt.Println("开始探测地图")
    setWay(&myMap, 1, 1)
    fmt.Println("开始探测地图完毕")
    //5.输出地图
    for i := 0; i < 8; i++ {
        for j := 0; j < 7; j++ {
            fmt.Print(myMap[i][j], " ")
        }
        fmt.Println()
    }
}
posted @ 2019-04-17 11:40  dfh168  阅读(133)  评论(0编辑  收藏  举报