前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >golang数据结构之递归解决迷宫问题

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

作者头像
西西嘛呦
发布2020-08-26 14:59:18
5730
发布2020-08-26 14:59:18
举报

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

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

maze.go

代码语言:javascript
复制
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

代码语言:javascript
复制
package main

import (
    "go_code/data_structure/maze"
)

func main() {

    maze.Maze()
}

运行结果:

f:\goproject\src\go_code\data_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]

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-12-11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档