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

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

maze.go

package maze

import (
"fmt"
) func SetWay(myMap *[][]int, i int, j int) bool {
//分析什么情况下就找到通路
if myMap[][] == {
return true
} else {
//如果是可以探测的
if myMap[i][j] == {
//假设是通的
myMap[i][j] =
//依据下右上左进行探测
if SetWay(myMap, i+, j) {
return true
} else if SetWay(myMap, i, j+) {
return true
} else if SetWay(myMap, i-, j) {
return true
} else if SetWay(myMap, i, j-) {
return true
} else {
//死路
myMap[i][j] =
return false
}
} else {
//否则不能探测
return false
}
}
} func Maze() {
//0:代表没有走过的路
//1:代表墙
//2:代表是一个通路
//3:代表走过,但是不通
var myMap [][]int
for i := ; i < ; i++ {
myMap[][i] =
myMap[][i] =
}
for i := ; i < ; i++ {
myMap[i][] =
myMap[i][] =
}
myMap[][] =
myMap[][] =
myMap[][] =
myMap[][] =
myMap[][] =
myMap[][] =
for i := ; i < ; i++ {
fmt.Println(myMap[i])
} SetWay(&myMap, , )
fmt.Println("探测完毕后的地图:")
for i := ; i < ; i++ {
fmt.Println(myMap[i])
}
}

main.go

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]

golang数据结构之递归解决迷宫问题的更多相关文章

  1. golang数据结构之总结

    golang语言的一些数据结构实现,包括: 队列(单队列.循环队列) 链表(单链表.双链表.循环链表(解决约瑟夫环问题)) 栈(实现加减乘除计算) 递归之迷宫问题 哈希表(员工管理系统) 树(三种遍历 ...

  2. 有关dfs、bfs解决迷宫问题的个人见解

    可以使用BFS或者DFS方法解决的迷宫问题! 题目如下: kotori在一个n*m迷宫里,迷宫的最外层被岩浆淹没,无法涉足,迷宫内有k个出口.kotori只能上下左右四个方向移动.她想知道有多少出口是 ...

  3. 数据结构实习 Problem H 迷宫的最短路径

    数据结构实习 Problem H 迷宫的最短路径 题目描述 设计一个算法找一条从迷宫入口到出口的最短路径. 输入 迷宫的行和列m n 迷宫的布局 输出 最短路径 样例输入 6 8 0 1 1 1 0 ...

  4. LeetCode--二叉树2--运用递归解决树的问题

    LeetCode--二叉树2--运用递归解决树的问题 在前面的章节中,我们已经介绍了如何利用递归求解树的遍历. 递归是解决树的相关问题最有效和最常用的方法之一. 我们知道,树可以以递归的方式定义为一个 ...

  5. Java数据结构之回溯算法的递归应用迷宫的路径问题

    一.简介 回溯法的基本思想是:对一个包括有很多结点,每个结点有若干个搜索分支的问题,把原问题分解为对若干个子问题求解的算法.当搜索到某个结点.发现无法再继续搜索下去时,就让搜索过程回溯(即退回)到该结 ...

  6. 数据结构之递归Demo(走迷宫)(八皇后)(汉诺塔)

    递归 顾名思义,递归就是递归就是递归就是递归就是递归......就是递归 Google递归:

  7. golang数据结构之用循环链表解决约瑟夫环问题

    josephu.go package link import ( "fmt" ) type Kid struct { ID int next *Kid } func AddKid( ...

  8. Java数据结构之递归(Recursion)

    1. 递归解决问题 各种数学问题如:8皇后问题,汉诺塔,阶乘问题,迷宫问题,球和篮子的问题(google编程大赛) 各种算法中也会使用到递归,比如快速排序,归并排序,二分查找,分治算法等 将用栈解决的 ...

  9. 算法基础③--DFS解决迷宫问题入门

    迷宫问题 通过深度优先搜索(DFS)方法实现. 迷宫问题一 一天蒜头君掉进了一个迷宫里面,蒜头君想逃出去,可怜的蒜头君连迷宫是否有能逃出去的路都不知道. 看在蒜头君这么可怜的份上,就请聪明的你告诉蒜头 ...

随机推荐

  1. C lang: VLA(variable-length array)

    Xx_VLA Introduction VLA:variable-length array,not variable array size,but variable arary dimensional ...

  2. Word文档转为MD

    最近整理近年的一些知识笔记,需要将一些之前用word写好的文档转为markdown格式,主要的方法是先将word转换为html格式,再将html转换为markdown格式. Step1. Word t ...

  3. ICMP和重定向攻击

    目录 ICMP数据报格式 smurf攻击 ICMP重定向攻击 基于libpcap的sniffer raw socket 定义包头 解析数据包 重定向 ICMP数据报格式 https://zhuanla ...

  4. mysql 8.0 忘记root密码后重置

    最近状态很不好,一直晕晕晕晕晕晕乎乎的,一个测试实例,下班前修改了一下root的密码,接着就下班走人,第二天来发现root密码忘了 刚好自动化安装脚本整理好了,本来想着算了直接重装实例得了,简单省事也 ...

  5. 官方版vs2008至vs2013下载地址

    Visual Studio 2005 Professional 官方90天试用版 英文版:http://download.microsoft.com/download/e/0/4/e04de840-8 ...

  6. centos7 链路聚合+KVM桥接连网

    一.两个物理网卡做链路聚合(em3,em4) 1)创建team类型的网卡,连接别名为team0,使用的模式为activebackup-主备/loadbalance-负载均衡nmcli con add ...

  7. [译]Vulkan教程(18)命令buffers

    [译]Vulkan教程(18)命令buffers Command buffers 命令buffer Commands in Vulkan, like drawing operations and me ...

  8. [译]Vulkan教程(16)图形管道基础之总结

    [译]Vulkan教程(16)图形管道基础之总结 Conclusion 总结 We can now combine all of the structures and objects from the ...

  9. python 对字典分别按照key值、value值进行排序

    1.sorted函数首先介绍sorted函数,sorted(iterable,key,reverse),sorted一共有iterable,key,reverse这三个参数. 其中iterable表示 ...

  10. arcgis api 4.x for js 自定义 Draw 绘制手绘面以及手绘线,只针对二维视图(附源码下载)

    前言 关于本篇功能实现用到的 api 涉及类看不懂的,请参照 esri 官网的 arcgis api 4.x for js:esri 官网 api,里面详细的介绍 arcgis api 4.x 各个类 ...