十一、递归----迷宫问题
一、递归的概念
1.递归就是方法自己调用自己,每次调用时传入不同的变量.递归有助于编程者解决复杂的问题,同时 可以让代码变得简洁。
二、递归调用机制
三、递归可以解决的问题
1.各种数学问题如: 8 皇后问题 , 汉诺塔, 阶乘问题, 迷宫问题, 球和篮子的问题(google 编程大赛)
2.各种算法中也会使用到递归,比如快排,归并排序,二分查找,分治算法等.
3).将用栈解决的问题–>使用递归代码比较简洁
四、递归需要遵守的重要规则
执行一个方法时,就创建一个新的受保护的独立空间(栈空间)
方法的局部变量是独立的,不会相互影响, 比如 n 变量
如果方法中使用的是引用类型变量(比如数组),就会共享该引用类型的数据.
递归必须向退出递归的条件逼近,否则就是无限递归,出现 StackOverflowError,死递归:)
当一个方法执行完毕,或者遇到 return,就会返回,遵守谁调用,就将结果返回给谁,同时当方法执行完毕或 者返回时,该方法也就执行完毕
五、使用递归解决迷宫问题
代码实现
package cn.zzw.algorithm.recursion;public class Maze {public static void main(String[] args) {//先创建一个二维数组,模拟迷宫地图int [][] map=new int[8][7];//使用1表示墙//制作上下两面的墙for(int i=0;i<7;i++){map[0][i]=1;map[7][i]=1;}//制作左右两面墙for(int i=0;i<8;i++){map[i][0]=1;map[i][6]=1;}//设置挡板map[3][1]=1;map[3][2]=1;//输出地图System.out.println("地图的情况为");for(int i=0;i<8;i++){for(int j=0;j<7;j++){System.out.print(map[i][j]+" ");}System.out.println();}//使用递归回溯给小球找路setWay(map,1,1);//输出新的地图System.out.println("小球走过,并标识走过的地图的情况");for(int i=0;i<8;i++){for(int j=0;j<7;j++){System.out.print(map[i][j]+" ");}System.out.println();}}/*** map表示地图* i,j表示小球开始的点的坐标* 如果小球能到达map[6][5]位置,说明找到通路* 规定:当map[i][j]为0表示走过;当为1时表示墙;* 2表示通路可以走;3表示该点已经走过,但是走不通* 走迷宫的策略:下--》右--》上--》左,如果该点走不通,再回溯** @param map 表示地图* @param i 表示开始的起点* @param j* @return*/public static boolean setWay(int[][] map,int i,int j){if(map[6][5]==2){//表示通路已经找到return true;}else{//表示当前这个点还没有走过if(map[i][j]==0){map[i][j]=2;//假定该点是可以走通if(setWay(map,i+1,j)){//向下走return true;}else if (setWay(map,i,j+1)){//向右走return true;}else if (setWay(map,i-1,j)){//向上走return true;}else if (setWay(map,i,j-1)){//向左走return true;}else{//说明该点是走不通的,是死路map[i][j]=3;return false;}}else{//表示如果map[i][j]!=0,可能是1,2,3return false;}}}
}
测试结果
"C:\Program Files\Java\jdk1.8.0_181\bin\java.exe" "-javaagent:D:\IntelliJ IDEA\IntelliJ IDEA 2019.3.3\lib\idea_rt.jar=4613:D:\IntelliJ IDEA\IntelliJ IDEA 2019.3.3\bin" -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Java\jdk1.8.0_181\jre\lib\charsets.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\deploy.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\access-bridge-64.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\cldrdata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\dnsns.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jaccess.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\jfxrt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\localedata.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\nashorn.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunec.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunjce_provider.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunmscapi.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\sunpkcs11.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\ext\zipfs.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\javaws.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jce.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfr.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jfxswt.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\jsse.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\management-agent.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\plugin.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\resources.jar;C:\Program Files\Java\jdk1.8.0_181\jre\lib\rt.jar;C:\Users\1\IdeaProjects\algorithm\out\production\algorithm" cn.zzw.algorithm.recursion.Maze
地图的情况为
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 0 0 0 0 1
1 0 0 0 0 0 1
1 1 1 1 1 1 1
小球走过,并标识走过的地图的情况
1 1 1 1 1 1 1
1 2 0 0 0 0 1
1 2 2 2 0 0 1
1 1 1 2 0 0 1
1 0 0 2 0 0 1
1 0 0 2 0 0 1
1 0 0 2 2 2 1
1 1 1 1 1 1 1 Process finished with exit code 0
十一、递归----迷宫问题相关推荐
- 【算法】递归|迷宫回溯问题|八皇后问题
[算法]递归|迷宫回溯问题|八皇后问题 迷宫回溯问题,要用动态的眼光来看待这个递归算法. package com.serein.recursion;/*** @author baichuan* @ ...
- 数据结构和算法(十)递归-迷宫游戏
1. 数据结构和算法(十)递归-迷宫游戏 1.1 迷宫游戏 今天做一个简单的迷宫游戏,用二维数实现地图,让程序自动寻路的小游戏. 1.2 简单的迷宫 简单的迷宫 用二维数实现地图,找路策略:[右- ...
- 学习随记三十一——递归实现二叉查找树
递归实现二叉查找树 什么是二叉查找树:左子树中的元素都比父节点元素小,右子树中的元素都比父节点中的元素大 二叉查找树的基本操作: 1.生成一颗空树 我选择使用递归来完成,如果传入的地址非空就先递归删除 ...
- 数据结构与算法 - 递归回溯(迷宫问题)
递归的概念 简单说就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时可以让代码简介 递归的调用机制 递归能解决什么问题 递归需要遵守的重要规则 下面用代码来实现一个迷 ...
- (数据结构与算法)递归及一些经典递归问题
文章目录 1. 递归的概念 2. 递归的调用机制 3. 递归需要遵守的重要规则 4. 递归 - 迷宫问题 5. 递归-八皇后问题 1. 递归的概念 递归就是方法自己调用自己,每次调用时传入不同的变量. ...
- 递归应用场景和调用机制
原文链接:传送门 递归 迷宫问题(回溯) 概念 简单呐的说: 递归就是方法自己调用自己,每次调用时传入不同的变量,递归有助于编程者解决复杂的问题,同时让代码变得简洁. 案例-递归调用机制 打印问题 p ...
- 6.python解答蓝桥杯17年A组真题 迷宫
6.python解答蓝桥杯17年A组真题 迷宫 标题:迷宫(填空题) X星球的一处迷宫游乐场建在某个小山坡上. 它是由10x10相互连通的小房间组成的. 房间的地板上写着一个很大的字母. 我们假设玩家 ...
- 数据结构和算法(第六章递归)
数据结构和算法第六章递归 数据结构和算法第六章递归 文章目录 数据结构和算法第六章递归 前言 一.递归与回溯? 二.递归用于解决的问题 1.打印问题和阶乘问题回顾递归调用机制 2.递归--迷宫问题(小 ...
- 20172323 2017-2018-2 《程序设计与数据结构》第九周学习总结
教材学习内容总结 本周学习第十一章异常和第十二章 第十一章-异常 异常是一个定义非正常情况或错误的对象,由程序或运行时环境抛出,可以根据需要进行相应的捕获和处理. 错误和异常都是对象,代表非正常情况或 ...
最新文章
- Python 连接 redis 模块
- 我是IT小小鸟 读书笔记
- (chap2 简单的Http协议) 请求报文和响应报文
- Java一个对象的内存运行流程图
- 基于图像切换器(imageSwitcher)的支持动画的图片浏览器
- 网络 计算机不显示不出来,网页图片显示不出来怎么办 网络故障解决【详解】...
- XEIM 帮助文档【草稿版】
- 【ubuntu操作系统入门】Ubuntu常用命令大全一
- JBoss中间件漏洞总结
- android packages/apps 加入工程,深入安卓Package Manager和Package Installer
- 在本地计算机无法启动iis admin 服务.错误:1053,Windows无法在本地计算机上启动SQL Server(SQLEXPRESS)服务。错误1053...
- 二叉树的前序序列、中序序列、后序序列、层次序列
- 细胞工程-6-原生质体分离核体细胞杂交
- 2020-10-24 车机UI的SystemUI修改
- BUCK电流检测分析
- (理财九)保值账户如何投资理财实现5年内短期目标
- Rtools 环境变量设置-windows
- oracle rac 11.2.0.4 镜像copy迁移数据到新存储
- uni-app 页面组件生命周期
- ubuntu 16.04 安装 openCV 3.2 --对该问题的处理CMake Error at cmake/OpenCVModule.cmake:295 (message)
热门文章
- vivado调用modelsim
- Gemini 3D双目结构光深度相机在Android平台上深度数据噪点非常多的问题
- pyhton 中的字符串切片问题
- iMeta:德布鲁因图在微生物组研究中的应用(全文翻译,PPT,视频)
- 单细胞转录组专题研讨会第二期
- 易生信高级转录组分析和数据可视化第9期课程开课啦!!
- 查看Linux中硬链的所有文件路径
- matlab cam orbit,如何在MATLAB中平滑旋转3D绘图?
- Warning message:NAs introduced by coercion
- R语言使用fmsb包、gradar包可视化雷达图(radar chart、蜘蛛图spider plot)、ggpubr包可视化点图、GGally包可视化多变量的平行坐标轴图