• golang数据结构之递归解决迷宫问题


    简单来说:递归就是函数/方法自己调用自己,只是每次传入不同的变量。

    递归可以解决各种数学问题:n皇后问题、阶乘问题、汉诺塔、迷宫问题、球和篮子问题等等;

    maze.go

    package maze
    
    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 Maze() {
        //0:代表没有走过的路
        //1:代表墙
        //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
        myMap[5][2] = 1
        myMap[5][3] = 1
        myMap[5][4] = 1
        myMap[5][5] = 1
        for i := 0; i < 8; i++ {
            fmt.Println(myMap[i])
        }
    
        SetWay(&myMap, 1, 1)
        fmt.Println("探测完毕后的地图:")
        for i := 0; i < 8; i++ {
            fmt.Println(myMap[i])
        }
    }

    main.go

    package main
    
    import (
        "go_code/data_structure/maze"
    )
    
    func main() {
    
        maze.Maze()
    }

    运行结果:

    f:goprojectsrcgo_codedata_structure>go run main.go
    [1 1 1 1 1 1 1]
    [1 0 0 0 0 0 1]
    [1 0 0 0 0 0 1]
    [1 1 1 0 0 0 1]
    [1 0 0 0 0 0 1]
    [1 0 1 1 1 1 1]
    [1 0 0 0 0 0 1]
    [1 1 1 1 1 1 1]
    探测完毕后的地图:
    [1 1 1 1 1 1 1]
    [1 2 3 3 3 3 1]
    [1 2 2 2 3 3 1]
    [1 1 1 2 3 3 1]
    [1 2 2 2 3 3 1]
    [1 2 1 1 1 1 1]
    [1 2 2 2 2 2 1]
    [1 1 1 1 1 1 1]

  • 相关阅读:
    for,while循环嵌套二次练习
    break语句;continue语句
    实际运用for、while循环嵌套
    for,while循环嵌套
    while循环
    if语法分支
    js读取cookie,并利用encrypt和decrypt加密和解密方法
    instance of的java用法
    objectmapper使用
    日志组件slf4j介绍及配置详解
  • 原文地址:https://www.cnblogs.com/xiximayou/p/12024445.html
Copyright © 2020-2023  润新知