常见问题:

小伙伴们在第一次遇到该问题时,思路大家都能清楚,就是遇到走不通的时候就换方向走,但是却不知道代码是如何走的。

解决问题:

代码如下:

public static void main(String[] args){int [ ][ ] map = new int [ 8][ 7];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;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();}Mouse t1 = new Mouse();t1.findway(map,1,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();} }
}
class Mouse{public boolean findway(int[ ][ ]map,int i,int j) {if(map[ 6 ][ 5 ] ==2) {return true;}else if(map[ i ][ j ] == 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 {return false;}  }

代码分析:

这段代码主要用二维数组生成一个地图,其中1表示围墙。不可走。0表示可以走。

  

这段代码主要是判短老鼠如何走。然后下面就是对这段代码的一个分析:(其中1表示地图不能走,0表示地图可以走,老鼠通过0后,将该位置改为2

当执行t1.findway(map,1,1);  将i=1,j=1带入方法,执行第一个if语句:

 if(map[ 6 ][ 5 ] ==2) {
            return true;
        }

很明显不满足条件,执行他的else语句:

else 
            if(map[ i ][ j ] == 0 ){
                map[ i ][ j ] =2;
                if(findway(map,i+1,j)) {
                    return true;
                }

这里就是判断map[1][1]是否为0,为0说明地图可以走,老鼠走后把该位置赋值为2.同时继续执行

if(findway(map,i+1,j)) {
                    return true;
                }

这个意思就是继续向下走,同时调用方法,也返回一个true。然后重复执行

else 
            if(map[ i ][ j ] == 0 ){
                map[ i ][ j ] =2;
                if(findway(map,i+1,j)) {
                    return true;
                }

向下走两次以后得到如图所示

在想向下走的时候会发现是个1(一堵墙)于是(这里就是一个关键,很多伙伴就卡在这里)

此时i=3,j=1;因为

 if(map[ 6 ][ 5 ] ==2) {
            return true;
        }

这段代码不满足,所以返回一个flase,(为什么返回flase可以向上面看代码)此时的flase是返回调用者 :

findway(map,2+1,j)

所以

findway(map,2+1,j)  = flase;

等同于:

if(findway(map,2+1,j)) {
                    return true;
                }

if(flase) {
                    return true;
                }

,所以执行下面的if语句

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;
                }

同理可以得如何执行的上下左右。

运行结果如下:

1111111
1200001
1222001
1112001
1002001
1002001
1002221
1111111

老鼠出迷宫详解(人人能搞懂)相关推荐

  1. 标准差详解-一文搞懂标准差的含义

    标准差详解-一文搞懂标准差的含义 转载自 样本标准差的意义是什么? 的第一个回答

  2. C语言 老鼠走迷宫详解6,算法: Mazing-老鼠走迷宫

    说明 老鼠走迷宫是递回求解的基本题型.我们在二维阵列中使用 2 表示迷宫墙壁,使用 1 来表示老鼠的行走路径,尝试以程式求由入口至出口的路径. 解法 老鼠可走上,下,左,右四个方向.入口一般在左上,出 ...

  3. c语言递归算法老鼠走迷宫详解,递归算法求老鼠走迷宫(C语言)

    /*说明老鼠走迷宫是递回求解的基本题型,我们在二维阵列中使用2表示迷宫墙壁, 使用1来表示老鼠的行走路径,试以程式求出由入口至出口的路径. 解法老鼠的走法有上.左.下.右四个方向,在每前进一格之后就选 ...

  4. python协程详解_彻底搞懂python协程-第一篇(关键词1-4)

    任何复杂的概念或系统都不是凭空出现的,我们完全可以找到它的演化历程,寻根究底终会发现,其都是在一系列并不那么复杂的简单组件上发展演化而来! by 落花僧 本文通过一系列关键概念,逐步递进理解协程. 0 ...

  5. 基于IIC通信的显示器OLED编程详解(一篇搞懂)

    前言: 上一篇博客介绍了IIC通信,这篇我们就来玩玩oled模块.当然选用的是IIC接口,因为市面上还有一种是SPI接口的.对于oled长啥样,采用了什么材料,工艺怎么怎么样等等这里就不作任何介绍,搞 ...

  6. Spring AOP详解一文搞懂@Aspect、@Pointcut、@Before、@Around、@After、@AfterReturning、@AfterThrowing

    文章目录 1.AOP是什么 2.AOP中注解的含义 3.Pointcut切入点的语法 4.AOP代码实现 1.AOP是什么 AOP:Aspect Oriented Programming,翻译过来就是 ...

  7. dbcp连接池配置详解_重学MySQL:事务与连接池,一文详解带你搞懂

    拼多多三面惨败,java中间件.数据库与spring框架,答不上... 吊打MySQL:21性能优化实践+学习导图+55面试+笔记+20高频知识点 Mysql事务 事务: 事务指逻辑上的一组操作,组成 ...

  8. 用html js制作迷宫,JavaScript生成随机迷宫详解

    本篇教程介绍了JavaScript生成随机迷宫详解,希望阅读本篇文章以后大家有所收获,帮助大家对JavaScript的理解更加深入. < #先看生成随机迷宫的代码吧↓ 1 2 3 生成随机迷宫v ...

  9. java实现老鼠出迷宫

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

最新文章

  1. 拜托,面试别再问我JVM了!!!
  2. MVC Razor:自定义Helper方法
  3. Maven入门指南① :Maven 快速入门及简单使用
  4. python autoreload
  5. 做一个p2p打洞的C#程序
  6. 二叉树的遍历(递归,非递归,Morris)
  7. c++无锁链表的实现
  8. go build不从本地gopath获取_跟我一起学习go语言,包依赖管理工具go mod
  9. powershell实现设置程序相关性脚本
  10. STM8L芯片启动时钟分频问题及发现(转)
  11. mysql 占用的解决_解决 MySQL 突然占用全部内存的问题
  12. 【重难点】【JUC 05】线程池核心设计与实现、线程池使用了什么设计模式、要你设计的话,如何实现一个线程池
  13. 局域网计算机共享加密码,局域网文件共享设置密码的方法
  14. 将 azw3 格式转换为 epub和mobi 格式
  15. 实施Scrum敏捷开发的关键要素
  16. rabbitMQ 使用mqtt协议 tcp 和 ws
  17. bzoj1864 [Zjoi2006]三色二叉树
  18. Android xml 画上半圆 矩形,Android 半圆矩形的实现
  19. python发送短信接口_python 调用接口发短信
  20. 罗云彬:实现水波特效的代码例子

热门文章

  1. [xhr4412][extension 6] 使用 Ralink USB_DEVICE(0x148f, 0x3070) 无线网卡
  2. mtk android 笔记,Android驱动笔记(9)——MTK平台Sensor Bring Up
  3. traceroute 命令
  4. IBM 3592-E05磁带机 TS1120 要点
  5. 保研面试英文常见问题
  6. 开源信息管理方案提供商Akeneo获1300万美元B轮融资
  7. 融云 WICC 剧透:“安全”出海不触礁,全球合规指南一网打尽
  8. jssdk分享设置_php快速实现微信分享jssdk接口的配置
  9. 直播商城搭建与开发(微信端)
  10. 里程碑4刷linux,里程碑!Linux版Edge终于来啦!