1、小球得到的路径,和程序员设置的找路策略有关,即:找路的上下左右的顺序相关

2、在得到小球路径时,可以先使用(下右上左),再改成(上右下左),看看路径是不是有变化

3、测试回溯现象

迷宫地图
主函数:/*思路* 1、先创建迷宫,用二维数组表示 int[][] map = new int[8][7];* 2、先规定 map 数组的元素值:0 表示可以1,1 表示障碍物* */int[][] map = new int[8][7];//3、将最上面的一行和最下面的一行,全部设置为1for (int i = 0;i < map[0].length;i++){map[0][i] = 1;map[7][i] = 1;}//4、将最左边一列和最右边一列,全部设置为1for (int i = 1;i < map.length - 1;i++){map[i][0] = 1;map[i][6] = 1;}map[3][1] = 1;map[3][2] = 1;//初始化后的数组如下图所示:

初始化数组
方法:
class T{public boolean findWay(int[][] map, int i, int j){}
}
//使用递归回溯的思想来解决老鼠处迷宫问题
//思路
/*1、findWay方法就是专门来找迷宫的路径
* 2、如果找到,就返回true,否则返回false
* 3、map 是二维数组,表示迷宫
* 4、i,j 是老鼠的位置,初始化的位置为map[1][1]
* 5、因为是递归的找路,需先规定 map 数组的各个值的含义
* 0 表示可以走,1 表示障碍物, 2 表示可以走, 3 表示走过,但是走不通,是思路
* 6、当map[6][5] = 2,说明找到了通路,就可以退出,否则继续找。
* 定义寻找路径的方式为:
* 策略1:下->右->上->左
* 策略2:上->右->下->左
* */
public class MiGong {public static void main(String[] args){/*思路* 1、先创建迷宫,用二维数组表示 int[][] map = new int[8][7];* 2、先规定 map 数组的元素值:0 表示可以1,1 表示障碍物* */int[][] map = new int[8][7];//3、将最上面的一行和最下面的一行,全部设置为1for (int i = 0;i < map[0].length;i++){map[0][i] = 1;map[7][i] = 1;}//4、将最左边一列和最右边一列,全部设置为1for (int i = 1;i < map.length - 1;i++){map[i][0] = 1;map[i][6] = 1;}map[3][1] = 1;map[3][2] = 1;
//        //验证回溯
//        map[2][2] = 1;
//        //验证死迷宫
//        map[2][1] = 1;
//        map[1][2] = 1;//输出当前的地图T t1 = new T();boolean foundWay = t1.findWay(map, 1, 1);//老鼠起始坐标:(1,1)if (foundWay){System.out.println("老鼠找到了出迷宫的路径,为迷宫数组中'2'对应连线。");for (int i = 0;i < map.length;i++) {for (int j = 0; j < map[i].length; j++) {System.out.print(map[i][j] + "\t");}System.out.println();}}else {System.out.println("老鼠没找到出迷宫的路径。");for (int i = 0;i < map.length;i++) {for (int j = 0; j < map[i].length; j++) {System.out.print(map[i][j] + "\t");}System.out.println();}}}
}class T {public boolean findWay(int[][] map, int i, int j){if(map[6][5] == 2){//当map[6][5] == 2时,表示老鼠找到了迷宫出口return true;}else if(map[i][j] == 0){map[i][j] = 2;//策略1:下->右->上->左if(findWay(map, i+1, j)){return true;}else if(findWay(map, i, j+1)){return true;}else if(findWay(map, i-1, j)){return true;}else if(findWay(map, i, j-1)){return true;}else{map[i][j] = 3;return false;}
//                //策略2:上->右->下->左
//                if(findWay(map, i-1, j)){
//                    return true;
//                }else if(findWay(map, i, j+1)){
//                    return true;
//                }else if(findWay(map, i+1, j)){
//                    return true;
//                }else if(findWay(map, i, j-1)){
//                    return true;
//                }else{
//                    map[i][j] = 3;
//                    return false;
//                }       }else{//map[i][j] == 1 || map[i][j] == 2 ||map[i][j] == 3return false;}}}
}

按照不同得寻路策略,老鼠出迷宫得路径图(图中蓝色路径)

按寻路策略1

按寻路策略2

验证回溯现象时,迷宫设置,以及运用寻路策略1,老鼠出迷宫路径图。

回溯现象老鼠出迷宫路径图

验证回溯现象,迷宫设置

递归问题之老鼠出迷宫相关推荐

  1. 老鼠出迷宫问题(Java)(递归)

    问题描述: 老鼠出迷宫:一只老鼠被放入迷宫之中,迷宫中设有障碍物(墙),通过向上,下,左,右移动,从而,找出正确的路线,抵达指定位置,从而走出迷宫.迷宫如图所示: 我们可以假设小老鼠的起始位置在A点, ...

  2. 老鼠出迷宫问题(递归问题)

    public class MiGong{public static void main(String[] args){//思路 //1. 先创建迷宫,用二维数组表示 int[][]//2. 先规定 m ...

  3. java实现老鼠出迷宫

    如图一只小老鼠从起点通过一些障碍到达终点,四周的墙壁不能通行,求通过计算得出迷宫路径,使老鼠成功逃出迷宫 算法设计 ①分而治之思想: 首先将老鼠出迷宫问题分成两部分求解,第一,迷宫的设计,第二,迷宫的 ...

  4. 递归回溯——老鼠出迷宫

    目录 前言 设计思路 绘制地图 寻找出路 绘制路线 总结 前言 这是一道关于递归回溯的经典题目,在布下障碍的迷宫中,为老鼠朋友找到一条可以逃出困境的路线,本文将为大家详细讲解如何运行递归的方法让老鼠走 ...

  5. 递归老鼠出迷宫,猴子吃桃练习以及注意事项。

    public class Method02 {public static void main(String[] args) {/*请使用递归的方式求出斐波那契数思路分析1.当N=1时,接过为12.当n ...

  6. 数据结构,Java实现递归回溯,寻找出迷宫路线,解决迷宫问题

    /*** @Author: Yeman* @Date: 2021-10-28-22:52* @Description:*/ public class Labyrinth {public static ...

  7. 老鼠出迷宫详解(人人能搞懂)

    常见问题: 小伙伴们在第一次遇到该问题时,思路大家都能清楚,就是遇到走不通的时候就换方向走,但是却不知道代码是如何走的. 解决问题: 代码如下: public static void main(Str ...

  8. 老鼠逃出迷宫(递归)

    如图一样的迷宫,红色部分代表有障碍物,老鼠从(1,1)坐标开始出发,坐标(6,5)代表迷宫出口,求出老鼠的逃离路径. /*老鼠出迷宫问题*/ public class P225MiGong {//先用 ...

  9. Java-老鼠出迷宫(递归)

    文章目录 问题描述 一.解题思想 二.编写代码 1.创建迷宫 2.写出findway方法 3.整体代码测试如下 三.总结 问题描述 一只小老鼠从起点通过一些障碍到达终点,四周的墙壁不能通行,请设计出迷 ...

最新文章

  1. 超实用总结:AI实践者需要用到的10个深度学习方法
  2. 返回倒数第 k 个节点
  3. LeetCode Two Sum III - Data structure design
  4. Django - 分页器
  5. 《云计算》学习笔记4——Google的云计算原理与应用(分布式结构化数据表BigTable)
  6. 指针常量 和 指向常量的指针区别
  7. python引入redis_使用python向Redis批量导入数据
  8. Mysql 导出 sql的执行结果到 csv文件
  9. USB接口定义详解(图)
  10. dx逆向建模步骤_产品温度的逆向建模的系统和方法与流程
  11. matlab求广义逆及线性方程组的解
  12. java让字体闪动_java 字体闪烁
  13. python eml解析_如何在python中读取eml文件?
  14. wps图片与图片间距怎么调整_wps图片与图片间距怎么调整_微信图文排版,字间距,行间距,怎么调整合适?......
  15. 要成就事业,更要分享快乐 记上海润邦(集团)有限公司董事长兼总经理李东
  16. 使用codemirror打造你自己的前端在线编辑器
  17. 华盛顿大学计算机本科录取,华盛顿大学美国排名及录取难度
  18. Yara引擎编译和发布
  19. 三大流行BI分析平台推荐,企业数据化选择工具
  20. jQuery写突出显示

热门文章

  1. 源码茶舍之android:externalService是什么属性?实现原理?
  2. 无源S参数2X-Thru去嵌方案
  3. 分享 | 会 Python 的人究竟怎么炒股?
  4. 个人博客图片(ElasticSearch)
  5. mysql中的Decimal括号怎么写,decimal(m,d)
  6. 弧齿锥齿轮零件图_格利森弧齿锥齿轮的装配与调整
  7. 游戏行业的发展前景有什么看法
  8. 天梯赛校内初赛3.23
  9. 5.3 卷积神经网络整体架构
  10. 原理解析:如何让 Join 跑得更快?