java递归-(迷宫问题)

前面

这里我们来玩个有趣的事情,链接是0221_韩顺平Java_老鼠出迷宫1_哔哩哔哩_bilibili

我们要找的是小老鼠按路径走到右下点

要点

我们这里方法调用时对于引用类型:如java中引用数据类型有哪些?_java引用数据类型-CSDN博客

会共享引用类型的数据。这里我们就来用引用类型的递归

代码

复制代码
//主类
public class hello{

	public static void main(String[] args){
		//构建地图。
		//二维数组表示 int[][] map=
		//0表示可走 1表示障碍物
		int [][]map=new int[8][7];
		//接着上面一行和最下面一行设置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;
		}
	
		for (int i=0;i<map.length ;i++ ) {
			for (int j=0; j<map[i].length; j++) {
				System.out.print(" "+map[i][j]);
				
			}
		map[3][5]=1;
		map[3][4]=1;
			System.out.print("\n");//换行""

			
		}
			//输出地图
		T t1=new T();
		t1.findway(map,1,1);
		System.out.print("====找路地图情况\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.print("\n");//换行""

			
		}



	}
}

我们先用1,0来描述我们的图片

结果

复制代码
D:\Store files\Job saving\java_store>java.exe li.java
====地图情况
 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

D:\Store files\Job saving\java_store>

实现路径找

我们来利用 0表示可以走 1表示障碍物 2表示可以走 3表示走过但是是死路

我们来利用findway方法。用参数int\[\]\[\] map,这个就是数组。我们前面说过了递归参数数组里面的值是共享的

复制代码
public boolean findway(int[][] map,int i,int j)

我们前面说过了不同方法栈中的n是不同的,不过再数组中的值确实相同的先来,判断在右下角的位置是不是2,如果是2的话,就相当于找到了位置

复制代码
if (map[6][5]==2) {//说明已经找到
			return true;

如果没找到,我们就上下左右的探问,我们是规定了0可以走的,如过这个位置为0那么我们就使得他为2,并且再次进行用递归判断

if (findway(map,i+1,j)) {//往下看看。如果findway(map,i+1,j))就是新的map,这个新的map是往下走后i,j=2的。

然后再if (map65==2) {//说明已经找到

return true;

}

判断一下,又是不满足的。就又到了 if(mapij==0){

//当前这个位置为0.说明可以走

mapij=2;

这里,然后又将当前位置等于2.先下返回true,往下往右则同理

我们知道了递归的时候谁调用函数,那么函数return的值也就是谁调用他时的位置。就是用if(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;//已经测试过了
		}
	}

我们在看3时走过但走不通。这是最后判断的

复制代码
map[i][j]=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 0 0 0 0 1
 1 2 2 2 0 0 1
 1 1 1 2 0 0 1
 1 0 0 2 0 0 1
 1 0 0 2 0 0 1
 1 0 0 2 2 2 1
 1 1 1 1 1 1 1

后面我们再来看看将障碍设置围住它

复制代码
		map[1][2]=1;
		map[2][2]=1;
		map[2][1]=1;

障碍

复制代码
 1 1 1 1 1 1 1
 1 0 1 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 0 0 0 0 0 1
 1 1 1 1 1 1 1

结果

1 1 1 1 1 1 1

1 3 1 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 0 0 0 0 0 1

1 1 1 1 1 1 1

后面我们来寻找最优的路线

相关推荐
小小龙学IT2 分钟前
Python SQLAlchemy 2.0 深度解析:从 Core 到 ORM 的数据访问双引擎
开发语言·数据库·python
2601_962885725 分钟前
如何用 Python 计算 ROC 变动率指标做动量分析?
开发语言·python·算法
在世修行6 分钟前
干货:文件上传端点解析
python·fastapi·接收上传
DongQiShanRen25 分钟前
裁决台账双向互校(上):名册与实物的第一道对账
java·linux·运维·数据库·人工智能·自然语言处理·数据挖掘
潼心1412o32 分钟前
C++初阶(长期更新)第9讲:string(上)
开发语言·c++
朝朝辞暮i44 分钟前
C++ 第 39 章: 阶段性总复习——类、对象、构造、继承、this、指针与智能指针
开发语言·c++·算法·ros2
cpolar技术支持1 小时前
Spring Boot 接口本地正常,异地前端却报跨域?用 cpolar 跑通 CORS 预检与白名单
java·springboot·cpolar·前后端分离·cors
wuminyu1 小时前
Virtual Thread重投递至ForkJoinPool任务队列过程解析
java·linux·c语言·jvm·c++
小蒜学长1 小时前
在线保险服务与管理平台的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·服务平台·在线保险
掉进电商坑三年没爬出来的东叔1 小时前
青龙面板进阶:一个面板聚合多平台签到,所有积分自动领
java·开发语言