李林超博客
首页
归档
留言
友链
动态
关于
归档
留言
友链
动态
关于
首页
Java
正文
数据结构学习--递归-迷宫问题
Leefs
2020-01-30 PM
1815℃
0条
# 数据结构学习--递归-迷宫问题 迷宫问题 ![11.递归--迷宫问题01.png][1] **代码实现** ```java public class MiGong { public static void main(String[] args) { //先创建一个二维数组,模拟迷宫 //地图 int[][] map = new int[8][7]; //使用1表示墙 //上下全部置为1 for(int i=0;i<7;i++){ map[0][i]=1; map[7][i]=1; } //左右全部置为1 for(int i=0;i<8;i++){ map[i][0]=1; map[i][6]=1; } //设置挡板 1表示 map[3][1]=1; map[3][2]=1; /*map[1][2]=1; map[2][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); setWay2(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(); } } //使用递归回溯来给小球找路 //说明 //1.map表示地图 //2.i,j表示从地图的哪个位置开始出发(1,1) //3.如果小球能到map[6][5]位置,则说明通路找到 //4.约定:当map[i][j]为0表示该点没有走过 当为1表示墙; 2 表示通路可以走; 3表示该点已经走过,但是走不通 //5.在走迷宫时,需要确定一个策略(方法)下->右->上->左,如果该点走不通,再回溯 /** * @param map 表示地图 * @param i 从哪个位置开始找 * @param j * @return 如果找到通路,就返回true,否则返回false * */ public static boolean setWay(int[][] map,int i,int j){ if(map[6][5] == 2){//通路已经找到ok 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,3 return false; } } } //修改找路的策略,改成上->右->下->左 public static boolean setWay2(int[][] map,int i,int j){ if(map[6][5] == 2){//通路已经找到ok return true; }else{ if(map[i][j]==0){//如果当前这个点还没有走过 //按照策略 上->右->下->左 map[i][j]=2;//假定该点可以走通 if(setWay2(map,i-1,j)){//向上 return true; }else if(setWay2(map,i,j+1)){//向右走 return true; }else if(setWay2(map,i+1,j)){//向下 return true; }else if(setWay2(map,i,j-1)){//向左走 return true; }else{ //说明该点是走不通,是死路 map[i][j]=3; return false; } }else{ //如果 map[i][j]!=0,可能是 1,2,3 return false; } } } } ``` > 运行结果 ``` 地图情况 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 2 2 2 2 1 1 0 0 0 0 2 1 1 1 1 0 0 2 1 1 0 0 0 0 2 1 1 0 0 0 0 2 1 1 0 0 0 0 2 1 1 1 1 1 1 1 1 ``` **对迷宫问题的讨论** > 1)小球得到的路径,和程序员设置的找路策略有关即:找路的**上下左右**的顺序相关 > > 2)再得到小球路径时,可以先使用(下右上左),再改成(上右下左),看看路径是不是有变化 > > 3)测试回溯现象 > > 4)**思考**: **如何求出最短路径**? [1]: https://lilinchao.com/usr/uploads/2020/01/2609671872.png
标签:
递归
,
数据结构
非特殊说明,本博所有文章均为博主原创。
如若转载,请注明出处:
https://lilinchao.com/archives/511.html
上一篇
数据结构学习--递归简述
下一篇
数据结构学习--递归-八皇后问题(回溯法)
评论已关闭
栏目分类
随笔
2
Java
326
大数据
229
工具
31
其它
25
GO
47
NLP
4
标签云
Livy
二叉树
Git
并发编程
栈
DataWarehouse
数据结构和算法
Golang基础
GET和POST
Yarn
BurpSuite
算法
Typora
Azkaban
Netty
gorm
pytorch
Thymeleaf
Shiro
Eclipse
Kibana
Beego
Spring
Nacos
Hbase
Sentinel
查找
Elasticsearch
散列
Spark SQL
友情链接
申请
范明明
庄严博客
Mx
陶小桃Blog
虫洞
评论已关闭