Java中的递归函数实例——小老鼠走迷宫


思路分析:

 1.应先用一个二维数组创造出一个迷宫;用0表示可以走;1表示障碍物; 2. 观察本图可以发现,第一行和最后一行均为障碍,第一列和最后一列均为障碍

     3.观察第四行前三列也均为障碍

 4.输出该地图

5.创建一个类,并用递归回溯思想解决老鼠出迷宫问题
 6.创建一个布尔类型的findWay方法 ,true表示找到,false表示没有找到
7.传入一个二维数组,并用i,j 表示当前位置,初始位置是(1,1)
 8.规定二维数组各个数值的意义:
0 可以走但没走过 1 障碍物 2 可以走通 3 可以走但是走不通

9.开始利用递归回溯写代码
/*思路分析:

      1.应先用一个二维数组创造出一个迷宫;用0表示可以走;1表示障碍物;

      2. 观察本图可以发现,第一行和最后一行均为障碍,第一列和最后一列均为障碍,于是代码实现如下*/
int[][] map = new int[8][7];
        for(int i = 0;i<7;i++){
            map[0][i] = 1;
            map[7][i] = 1;
        }
        for (int j = 0;j<8;j++){
            map[j][0]=1;
            map[j][6]= 1;
        }
 //3.观察第四行前三列也均为障碍于是代码如下
map[3][1] = 1;
map[3][2] = 1;
//4.输出该地图
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();
        }
//5.创建一个类,并用递归回溯思想解决老鼠出迷宫问题
//6.创建一个布尔类型的findWay方法 ,true表示找到,false表示没有找到
//7.传入一个二维数组,并用i,j 表示当前位置,初始位置是(1,1),代码实现如下
class T{
    public boolean findway( int map[][],int i,int j){
        
    }

}
//8.规定二维数组各个数值的意义:0 可以走但没走过 1 障碍物 2 可以走通  3 可以走但是走不通
//9.开始利用递归回溯写代码
class T{
    public boolean findway( int map[][],int i,int j){
        if(map[6][5] == 2){/*如果数组的值等于2则证明走出了迷宫,返回一个真*/
            return true;
        }
        if(map[i][j]==0){//如果数组值等于0,则可以走但没走过
            map[i][j] = 2;/*令数组值等于2并不断尝试找路,找路策略为下—>右—> 左—>上(tips:找路策略会影响其走出迷宫的路径因此可以思考怎么样才能找出最短路径)*/
            if (findway(map,i+1,j)){
                return true;
            }else if (findway(map,i,j+1)){
                return true;
            }else if (findway(map, i, j-1)){
                return true;
            }else if (findway(map, i-1, j)){
                return true;
            }else {
                map[i][j] =3;
                return false;
            }
        }else{/*如果数组值不等于0,为1,2,3则说明不能走返回一个false*/
            return false;
        }
    }
//10.输出找路后的数组
        T p1 = new T();
        p1.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();
        }
//11.全部代码如下:
public class Migong {
    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 j = 0;j<8;j++){
            map[j][0]=1;
            map[j][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();
        }
        T p1 = new T();
        p1.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 T{
    public boolean findway( int map[][],int i,int j){
        if(map[6][5] == 2){
            return true;
        }
        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, j-1)){
                return true;
            }else if (findway(map, i-1, j)){
                return true;
            }else {
                map[i][j] =3;
                return false;
            }
        }else{
            return false;
        }
    }

}

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM