java-老鼠出迷宫1

先设置下迷宫地图



这时我们的迷宫地图就设置好了 源码如下
public class Maze {
public static void main(String[] args) {
//1.先创建迷宫 用数组二维表示int[][]map=new int [8][7];
//2.先规定map数组的元素值:0表示可以走,1表示障碍物
int[][] map = new int[8][7];
//3.将最上面一行和最下面一行 全部设置为1
for (int i = 0; i < 7; i++) {
map[0][i] = 1;
map[7][i] = 1;
}
//4.将最右面一行和最左面一行 全部设置为1
for (int i = 0; i < 8; i++) {
map[i][0] = 1;
map[i][6] = 1;
}
//5.第四行前三个格子也是障碍物,这时设置两个格子就好了
map[3][1] = 1;
map[3][2] = 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();
}
}
}

java-老鼠出迷宫2(下右上左)

现在开始给老鼠找路


附源码
public class Maze {
public static void main(String[] args) {//maze迷宫
//1.先创建迷宫 用数组二维表示int[][]map=new int [8][7];
//2.先规定map数组的元素值:0表示可以走,1表示障碍物
int[][] map = new int[8][7];
//3.将最上面一行和最下面一行 全部设置为1
for (int i = 0; i < 7; i++) {
map[0][i] = 1;
map[7][i] = 1;
}
//4.将最右面一行和最左面一行 全部设置为1
for (int i = 0; i < 8; i++) {
map[i][0] = 1;
map[i][6] = 1;
}
//5.第四行前三个格子也是障碍物,这时设置两个格子就好了
map[3][1] = 1;
map[3][2] = 1;
//如果不明白把下面三条语句取消注释
// map[2][1] = 1;
// map[2][2] = 1;
// map[1][2] = 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();}//使用findWay给老鼠找路T t1=new T();t1.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 T{
//使用递归回溯的思想来解决老鼠出迷宫
//1.findWay方法就是战门来找出迷宫的路径
//2.如果找到就返回true 否则就返回false
//3.map就是二维数组 即表示迷宫
//4.i j 就是老鼠的位置 初始化的位置是(1,1)
//5.因为我们是递归的找路 所以我们先规定map数组的各个值的含义
// 0表示可以走 1表示障碍物 2.表示可以走 3.表示走过、但是走不通
//6.当map[6][5]=2 就说明找到通路可以结束了,否则就继续找
//7.先确老鼠找路策略 下>右>上>左
public boolean findWay(int[][]map,int i,int j){
if (map[6][5]==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;
}
}
}
}

java-老鼠出迷宫2(上右下左)

现在改下策略 看看对路径是否有影响
新写了一个方法findWay2 原来下>右>上>左 现在变成上>右>下>左


调用方法时用findWay2 把位置改下 上>右>下>左
findWay改成findWay2 源码如下

public class Maze {
public static void main(String[] args) {//maze迷宫
//1.先创建迷宫 用数组二维表示int[][]map=new int [8][7];
//2.先规定map数组的元素值:0表示可以走,1表示障碍物
int[][] map = new int[8][7];
//3.将最上面一行和最下面一行 全部设置为1
for (int i = 0; i < 7; i++) {
map[0][i] = 1;
map[7][i] = 1;
}
//4.将最右面一行和最左面一行 全部设置为1
for (int i = 0; i < 8; i++) {
map[i][0] = 1;
map[i][6] = 1;
}
//5.第四行前三个格子也是障碍物,这时设置两个格子就好了
map[3][1] = 1;
map[3][2] = 1;
//如果不明白把下面三条语句取消注释
// map[2][1] = 1;
// map[2][2] = 1;
// map[1][2] = 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();
}
//使用findWay2给老鼠找路
T t1 = new T();
t1.findWay2(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 T {
//使用递归回溯的思想来解决老鼠出迷宫
//1.findWay方法就是战门来找出迷宫的路径
//2.如果找到就返回true 否则就返回false
//3.map就是二维数组 即表示迷宫
//4.i j 就是老鼠的位置 初始化的位置是(1,1)
//5.因为我们是递归的找路 所以我们先规定map数组的各个值的含义
// 0表示可以走 1表示障碍物 2.表示可以走 3.表示走过、但是走不通
//6.当map[6][5]=2 就说明找到通路可以结束了,否则就继续找
//7.先确老鼠找路策略 下>右>上>左
public boolean findWay(int[][] map, int i, int j) {
if (map[6][5] == 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;
}
}
}

//新写了一个方法findWay2
//修改找路策略 看看路径是否有变化
//原来下>右>上>左     现在变成上>右>下>左
public boolean findWay2(int[][] map, int i, int j) {if (map[6][5] == 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,3return false;}}
}

}

java-老鼠出迷宫3 测试回溯现象


java-老鼠出迷宫相关推荐

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

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

  2. java实现老鼠出迷宫

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

  3. 递归问题之老鼠出迷宫

    1.小球得到的路径,和程序员设置的找路策略有关,即:找路的上下左右的顺序相关 2.在得到小球路径时,可以先使用(下右上左),再改成(上右下左),看看路径是不是有变化 3.测试回溯现象 迷宫地图 主函数 ...

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

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

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

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

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

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

  7. Java老鼠走迷宫流程图_老鼠走迷宫(队列实现)

    1.[文件] Game.cpp ~ 2KB 下载(134) // Game.cpp: implementation of the Game class. // // #include "Ga ...

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

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

  9. java代码老鼠走迷宫案例

    java代码老鼠走迷宫案例 public class MiGong{//编写一个main方法public static void main(String[] args) {//思路// 1. 先创建迷 ...

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

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

最新文章

  1. 【转】python包导入细节
  2. vs2010发布、打包安装程序(超全超详细)
  3. Java程序员必看!2021最新爱奇艺Java社招面试题目
  4. 魅族升级鸿蒙,魅族要“弯道超车”?率先升级鸿蒙OS,挥别安卓系统
  5. 数据结构实验之排序三:bucket sort
  6. hadoop--集群崩溃处理方法
  7. 在.Net中json应用测试整理
  8. linux每日命令(2):ps命令
  9. cmd 文本文件分割_通过split命令分割大文件
  10. 福昕编辑器打开pdf自动打印
  11. 小菜编程成长记(十二 无熟人难办事?——聊设计模式迪米特法则)
  12. MobileNet_V3—SSD网络模型图文详解
  13. SRE(运维工程师)一文详解技术体系和架构师成长之路
  14. 短信验证码,在键盘显示验证码
  15. Android中一个app启动另一个app的指定activity
  16. mutate  字段替换
  17. JAVA 导出大批量数据EXCEL
  18. OaisimWithS1搭建笔记(2019.5)
  19. 【数学】什么是取模运算?
  20. 肺部结节智能诊断 csdn_在计算机的帮助下诊断肺部疾病

热门文章

  1. 微信小程序--简约加载动画合集
  2. 永恒之蓝(ms17-010)漏洞简介及复现
  3. 计算机毕业设计Java车辆调度管理系统(源码+系统+mysql数据库+lw文档
  4. Electron开发桌面应用(一) Helloworld
  5. 国标视频云服务平台EasyGBS出现只能通过录像机观看的情况该如何解决?
  6. 360锁屏壁纸超级好看,于是想保存下来。
  7. 矩阵相抵的一道例题(对称+主子式)
  8. OAS的使用——Python SDK
  9. 华为认证hcip怎么找工作?考取华为认证hcip证书可以做什么?
  10. 计算机考博面试题,交大系统博士笔试和面试题目