go_数据结构_递归_迷宫回溯

1、递归

1.1 递归的应用场景(迷宫回溯问题)

1.2 递归概念

​ 递归就是函数/方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时让代码变得简单。

1.3 递归快速入门

​ 1、打印问题

​ 2、阶乘问题

1.4 递归解决问题

1、各种数学问题:n皇后问题、汉诺塔、阶乘问题、迷宫问题等

2、将用栈解决的问题-------》递归代码比较简洁

1.5 递归需要遵守的原则

1、执行一个函数时,就创建一个新的受保护的独立空间(新函数栈)

2、函数的局部变量是独立的,不会互相影响

3、递归必须向退出递归的条件逼近,否则就是无限递归

4、当一个函数执行完毕,或者遇到return,就会返回,遵守谁调用就将结果返回给谁,同时当函数执行完毕或者返回时,该函数就会被系统销毁

1.6 迷宫问题代码实现

package main

import "fmt"

//编写函数,完成迷宫路线
//i,j表示对地图的点进行测试
func setway(mymap *[8][7]int, i, j int) bool {
	//[6][5]代表终点
	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() {
	//1、先用二维数组设计一个地图,模拟迷宫
	//2、用1 代表墙壁
	//3、用0 代表道路
	//4、走通的路用2表示
	//5、不通的路用3表示

	mymap := [8][7]int{}

	i, j := 0, 0

	for i = 0; i < 7; i++ {
		mymap[0][i] = 1
		mymap[7][i] = 1
	}
	for j = 0; j < 8; j++ {
		mymap[j][0] = 1
		mymap[j][6] = 1
	}
	mymap[3][1] = 1
	mymap[3][2] = 1
	//打印地图
	for i = 0; i < 8; i++ {
		for j = 0; j < 7; j++ {
			fmt.Print(mymap[i][j], " ")
		}
		fmt.Println()
	}
	setway(&mymap, 1, 1)
	fmt.Println("地图走完::::")
	for i = 0; i < 8; i++ {
		for j = 0; j < 7; j++ {
			fmt.Print(mymap[i][j], " ")
		}
		fmt.Println()
	}
}

参考网站:
https://www.bilibili.com/video/BV114411D768

posted @ 2021-03-05 10:47  天下医者不自医  阅读(49)  评论(0编辑  收藏  举报