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

递归可以解决各种数学问题: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. 2、netty第一个例子,简单的http服务器

    用netty来启动一个简单的可处理http请求的服务器. 依照前面写的使用netty的过程.贴上代码 server import io.netty.bootstrap.ServerBootstrap; ...

  2. [MySQL] 使用force index强制使用索引

    1.在测试一个按照时间的范围查询时,尽管增加了索引,发现使用不到索引,可以使用这个来强制使用索引 测试过程为,创建下面的表,以及创建了联合索引 create table delay_delete_us ...

  3. linux 磁盘分区和挂载看这一篇就够了

    Linux fdisk 和 mount 命令操作指南,linux磁盘管理.新增磁盘.挂载新硬盘(linux运维入门) 首先列出文件系统的整体磁盘空间使用情况.可以用来查看磁盘已被使用多少空间和还剩余多 ...

  4. [CodeForces - 1272D] Remove One Element 【线性dp】

    [CodeForces - 1272D] Remove One Element [线性dp] 标签:题解 codeforces题解 dp 线性dp 题目描述 Time limit 2000 ms Me ...

  5. 用 Python 图像识别打造一个小狗分类器

    ​ 项目介绍 小狗分类器可以做什么? 通过这个分类器,你只需要上传照片,就可以得到小狗的品种,以及更多的信息. 这就是所谓的「机器学习」,让机器自己去“学习”.我们今天要做的这个分类任务,是一个“监督 ...

  6. C sharp #004# 进度条与Timer

    饮水思源:金老师的自学网站 C#实现进度条异常简单,因为所有东西都已经封装好了. 只需要简单的拖拽: 写两行代码就完工了: private void timer1_Tick(object sender ...

  7. Mysql将日期转为字符串

    select date_format(time, '%Y-%m-%d %H:%i:%s') from info # 2019-08-22 21:03:21

  8. Emoji来龙去脉

    1997年,日本人发明,定义在unicode的私有区域. 此时两个字节可以表示emoji. IOS 4在日本支持emoji,使用的是这种私有编码. 2010年,unicode 6.0正式支持emoji ...

  9. VS2010到VS2019各个版本的密钥

    VS2019专业版和企业版的密钥 Visual Studio 2019 EnterpriseBF8Y8-GN2QH-T84XB-QVY3B-RC4DF Visual Studio 2019 Profe ...

  10. C#中实现文件重命名的方式

    场景 在C#中如果是删除文件的话可以直接使用 if (System.IO.File.Exists(fileName)) { System.IO.File.Delete(fileName); } 但是如 ...