前面
这里我们来玩个有趣的事情,链接是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];//接着上面一行和最下面一行设置1for (int i=0; i<7;i++ ) {map[0][i]=1;map[7][i]=1;}//将最右边列和最左边列设置1for (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 11 0 0 0 0 0 11 0 0 0 0 0 11 1 1 0 0 0 11 0 0 0 0 0 11 0 0 0 0 0 11 0 0 0 0 0 11 1 1 1 1 1 1D:\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 (map[6][5]==2) {//说明已经找到
return true;
}
判断一下,又是不满足的。就又到了 if(map[i][j]==0){
//当前这个位置为0.说明可以走
map[i][j]=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,3return false;//已经测试过了}}
我们在看3时走过但走不通。这是最后判断的
map[i][j]=3;return false;
那我们来输出并看看结果
结果
====地图情况1 1 1 1 1 1 11 0 0 0 0 0 11 0 0 0 0 0 11 1 1 0 0 0 11 0 0 0 0 0 11 0 0 0 0 0 11 0 0 0 0 0 11 1 1 1 1 1 1
====找路地图情况
====地图情况1 1 1 1 1 1 11 2 0 0 0 0 11 2 2 2 0 0 11 1 1 2 0 0 11 0 0 2 0 0 11 0 0 2 0 0 11 0 0 2 2 2 11 1 1 1 1 1 1
后面我们再来看看将障碍设置围住它
map[1][2]=1;map[2][2]=1;map[2][1]=1;
障碍
1 1 1 1 1 1 11 0 1 0 0 0 11 1 1 0 0 0 11 0 0 0 0 0 11 0 0 0 0 0 11 0 0 0 0 0 11 0 0 0 0 0 11 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
后面我们来寻找最优的路线