java 递归 迷宫问题(个人学习笔记)

递归注意事项:

 

思路: 

 代码:

public class Recursion_maze {
    public static void main(String[] args) {
        //创建好迷宫地图
        //0--表示未走过的地方   1--表示墙  2---表示通路  3----表示死路
        int[][] maze=new int[8][7];
        for (int i = 0; i <7 ; i++) {
            maze[0][i]=1;
            maze[7][i]=1;
        }
        for (int i = 0; i <7 ; i++) {
            maze[i][0]=1;
            maze[i][6]=1;
        }
        maze[3][1]=1;
        maze[3][2]=1;
        maze[4][3]=1;
        maze[4][4]=1;
        //检查是否创建正确
        for (int[] a:
             maze) {
            System.out.println(Arrays.toString(a));
        }
        path(maze,1,1);
        System.out.println("***************************");
        for (int[] a:
                maze) {
            System.out.println(Arrays.toString(a));
        }
    }
    public static boolean path(int[][] maze,int i,int j) {
        //递归终止条件,避免死循环递归
        if(maze[i][j]==2) {
            return true;
        }
        else {
            //每一个点:下 右 上 左
           if(maze[i][j]==0) {
               maze[i][j]=2;
               if(path(maze,i+1,j)) {
                   return true;
               }
               else if(path(maze,i,j+1)) {
                   return true;
               }
               else if(path(maze,i-1,j)) {
                   return true;
               }
               else if(path(maze,i,j-1)) {
                   return true;
               }
               else {
                   maze[i][j]=3;
                   return false;
               }
           }
           else {
               return false;
           }
        }
    }
}

心得:

递归算是自己学习数据结构中第一个遇见的难理解的问题了。无限套娃,比较复杂,利用栈的思维来理解每一次的递归调用的方法进栈,出站。多动动笔,画画图来理解。后续有感悟继续更新...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值