递归回溯之小老鼠出迷宫问题

直接看代码

/**
* @ClassName MiGong01
* @Description TODO
* @Author Orange
* @Date 2021/4/16 8:08
* @Version 1.0
**/
public class MiGong01 {
public static void main(String[] args) { int [][] map = new int [10][10]; //设置迷宫大小
for(int i = 0; i < map.length; i++) { //设置迷宫形状
for (int j =0; j < map[i].length; j++) {
map[0][j] = 1;
map[9][j] = 1; }
map[i][0] = 1;
map[i][9] = 1;
}
map[3][1] = 1; //设置迷宫障碍物的位置
map[3][2] = 1;
map[3][3] = 1;
map[3][4] = 1;
map[2][4] = 1;
map[2][5] = 1;
map[4][6] = 1;
map[5][5] = 1;
map[5][6] = 1;
map[5][7] = 1;
map[5][8] = 1;
map[6][4] = 1;
map[6][5] = 1;
map[7][4] = 1; 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] + " "); //输出一行
}
System.out.println();
} Find F1 = new Find();
//下右上左
F1.findWay(map, 1, 1);
System.out.println("\n==第三种找路的情况如下==");
for(int i = 0; i < map.length; i++) {
for(int j = 0; j < map[i].length; j++) {
System.out.print(map[i][j] + " "); //输出一行
}
System.out.println();
}
}
} class Find {
//使用递归回溯的思想来解决老鼠出迷宫
//1. findWay 方法就是专门来找出迷宫的路径
//2. 如果找到,就返回true ,否则返回false
//3. map 就是二维数组,即表示迷宫
//4. i,j 就是老鼠的位置,初始化的位置为(1,1)
//5. 因为我们是递归的找路,所以我先规定map 数组的各个值的含义
// 0表示可以走 1表示障碍物 2表示可以走 3表示走过,但是走不通是死路
//6. 当map[8][8] =2 就说明找到通路,就可以结束,否则就继续找.
//7. 先确定老鼠找路策略下->右->上->左
public boolean findWay(int[][] map , int i, int j) { if (map[8][8] == 2) { //说明已经找到
return true;
} else {
if (map[i][j] == 0) { //当前这个位置0,说明表示可以走
//我们假定可以走通
map[i][j] = 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 , 2, 3
return false;
}
}
}
//修改找路策略,看看路径是否有变化
//下->右->上->左==> 上->右->下->左
public boolean findWay2(int[][] map , int i, int j) {
if (map[8][8] == 2) { //说明已经找到
return true;
} else {
if (map[i][j] == 0) { //当前这个位置0,说明表示可以走
//我们假定可以走通
map[i][j] = 2;
//使用找路策略,来确定该位置是否真的可以走通
//上->右->下->左
if (findWay2(map, i - 1, j)) { //先走上
return true;
} else if (findWay2(map, i, j + 1)) { //右
return true;
} else if (findWay2(map, i + 1, j)) { //下
return true;
} else if (findWay2(map, i, j - 1)) { //左
return true;
} else {
map[i][j] = 3;
return false;
}
} else { //map[i][j] = 1 , 2, 3
return false;
}
}
} public boolean findWay3(int[][] map , int i, int j) { if (map[8][8] ==2) { //说明已经找到
return true;
} else {
if (map[i][j] == 0) { //当前这个位置0,说明表示可以走
//我们假定可以走通
map[i][j] = 2;
//使用找路策略,来确定该位置是否真的可以走通
//下->左->上->右
if (findWay3(map, i + 1, j)) { //先走下
return true;
} else if (findWay3(map, i, j - 1)) { //左
return true;
} else if (findWay3(map, i - 1, j)) { //上
return true;
} else if (findWay3(map, i, j + 1)) { //右
return true;
} else {
map[i][j] = 3;
return false;
}
} else { //map[i][j] = 1 , 2, 3
return false;
}
}
}
}
/*程序运行结果:
---------------------
=====当前地图情况======
1 1 1 1 1 1 1 1 1 1
1 0 0 0 0 0 0 0 0 1
1 0 0 0 1 1 0 0 0 1
1 1 1 1 1 0 0 0 0 1
1 0 0 0 0 0 1 0 0 1
1 0 0 0 0 1 1 1 1 1
1 0 0 0 1 1 0 0 0 1
1 0 0 0 1 0 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1 ==第三种找路的情况如下==
1 1 1 1 1 1 1 1 1 1
1 2 0 2 2 2 2 3 3 1
1 2 2 2 1 1 2 3 3 1
1 1 1 1 1 2 2 3 3 1
1 0 0 0 2 2 1 3 3 1
1 0 0 2 2 1 1 1 1 1
1 0 0 2 1 1 0 0 0 1
1 0 0 2 1 0 0 0 0 1
1 0 0 2 2 2 2 2 2 1
1 1 1 1 1 1 1 1 1 1
--------------------*/

过程分析:

  分析如下图↓

Java笔记_递归回溯之小老鼠出迷宫问题的更多相关文章

  1. Java笔记_静态变量和实例变量的区别

    这里简单做一下笔记,区分Java全局变量里的静态变量与实例变量. 1.Java里的全局变量 首先了解Java里的全局变量,也叫成员变量. 特点: (1).一个类中既不在方法体内,也不在程序块内定义的变 ...

  2. [笔记] HOW2J.CN网站记录的java笔记_第四部分_HTML

    1.写一个显示Hello World的网页, <html> <body> <p>Hello World</p> </body> </h ...

  3. servlet(6) - servlet总结 - 小易Java笔记

    垂阅前必看: 这都是我总结的我觉得是学习servlet应该掌握的,我在学习期间也做了一个博客项目来让所学的知识得以巩固.下面就是博客项目链接.前面的servlet相关的笔记总汇,还有就是我把觉得在学习 ...

  4. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,递归方案

    八皇后问题,是一个古老而著名的问题,是回溯算法的典型案例.该问题是国际西洋棋棋手马克斯·贝瑟尔于1848年提出:在8×8格的国际象棋上摆放八个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行.同 ...

  5. JSP(1) - JSP简介、原理、语法 - 小易Java笔记

    1.JSP简介 (1)JSP的全称是Java Server Pages(运行在服务器端的页面),实际就是Servlet(学习JSP的关键就是时刻联想到Servlet) (2)JSP.Servlet各自 ...

  6. Java与算法之(5) - 老鼠走迷宫(深度优先算法)

    小老鼠走进了格子迷宫,如何能绕过猫并以最短的路线吃到奶酪呢? 注意只能上下左右移动,不能斜着移动. 在解决迷宫问题上,深度优先算法的思路是沿着一条路一直走,遇到障碍或走出边界再返回尝试别的路径. 首先 ...

  7. java笔记整理

    Java 笔记整理 包含内容     Unix Java 基础, 数据库(Oracle jdbc Hibernate pl/sql), web, JSP, Struts, Ajax Spring, E ...

  8. Effective Java笔记一 创建和销毁对象

    Effective Java笔记一 创建和销毁对象 第1条 考虑用静态工厂方法代替构造器 第2条 遇到多个构造器参数时要考虑用构建器 第3条 用私有构造器或者枚举类型强化Singleton属性 第4条 ...

  9. React笔记_(3)_react语法2

    React笔记_(3)_react语法2 state和refs props就是在render渲染时,向组件内传递的变量,这个传递是单向的,只能继承下来读取. 如何进行双向传递呢? state (状态机 ...

  10. 算法基础_递归_求杨辉三角第m行第n个数字

    问题描述: 算法基础_递归_求杨辉三角第m行第n个数字(m,n都从0开始) 解题源代码(这里打印出的是杨辉三角某一层的所有数字,没用大数,所以有上限,这里只写基本逻辑,要符合题意的话,把循环去掉就好) ...

随机推荐

  1. Linux环境下:程序的链接, 装载和库[静态链接]

    看以下例子 main.c extern int x; int main() { int y = 100; swap(&x,&y); return 0; } int x = 1; voi ...

  2. 计算机重装Windows操作系统

    这里使用虚拟机模拟电脑安装操作系统: 一.安装ventoy U盘启动工具: 注意:1.这一步需要格式化U盘,所以最好使用空U盘或者提前备份. 2.这里是下载在电脑上面,不是下载在U盘里面. 下载好后进 ...

  3. 【学习日志】MySQL分表与索引的关系

    什么情况下需要分表呢?分表又能解决什么问题呢? 一般情况下分表的直接原因是数据量太大了,比如一张表一共只有1w条数据,确实没必要分表.为什么数据量大了就需要分表呢?首先得看看数量量过大后会带来什么问题 ...

  4. JAVA虚拟机02---JAVA虚拟机运行时数据区域简介

      JAVA虚拟机运行时数据区域 1.程序计数器 1)它可以看做是当前线程执行的字节代码的行指示器,通过改变计数器的值来决定下一步执行的代码 2)它是线程私有的,每个线程都有自己的程序计数器(JAVA ...

  5. 定位bug

    软件测试阶段:单元测试,集成测试,系统测试,验收测试 测试人员参与的软件测试阶段一般来说只有集成测试和系统测试阶段.集成测试阶段主要测试的是接口:系统测试阶段主要是功能测试,兼容性测试等,涉及到定位b ...

  6. VS 撰写生成了多个撰写错误,其根本原因有X点,如下所列。有关详细信息,请查看CompositionException.Error属性

    打开VS开发程序,莫名其妙的出现如下图错误: 网上找了很多资料,有前辈说以下方法: 解决方案如下 打开文件夹 Users\<CurrentUser>\AppData\Local\Micro ...

  7. Zstack 鼎阳SDS6204示波器和Archiver Appliance的重度测试1

    今天早晨冷师兄问起鼎阳这款示波器的情况,这几天重度烤机,发现这款一直稳定连续运行没出现过连接等等问题,正兴奋着呢,本来想坚持到开学前多烤烤机再抖抖,实在没忍住跟师兄说了情况,并说发给他,放假白天没有大 ...

  8. Xlight安装与使用

    Xlight安装与使用 一.Xlight安装 下载Xlight安装包,点击安装,默认就可以,下一步 点击左上角增加虚拟服务器,IP地址为本机服务器IP地址 右键点击新添加的虚拟服务器,点击虚拟服务器操 ...

  9. Spring Boot Hello World 基于 IDEA 案例详解

    一.Spring Boot 是什么 世界上最好的文档来源自官方的<Spring Boot Reference Guide>,是这样介绍的: Spring Boot makes it eas ...

  10. Redux Toolkit 的使用方法

    Redux Toolkit 是什么? Redux Toolkit 是 Redux 官方强烈推荐,开箱即用的一个高效的 Redux 开发工具集.它旨在成为标准的 Redux 逻辑开发模式,我们强烈建议你 ...