数据结构——递归实现迷宫

迷宫问题——递归

问题描述:

一个8行7列的迷宫四周是围墙,从左上角的位置到达右下角,寻找一条轨迹

迷宫

代码:

package cn.littleworm;

//递归实现迷宫算法
public class Maze {

    public static void main(String[] args) {

        //创建二维数组,8行,7列
        int[][] array = new int[8][7];

        //四周是墙,用1来表示
        for (int i = 0; i < 8; i++) {
            array[i][0] = 1;
            array[i][6] = 1;
        }

        for (int i=0;i<7;i++){
            array[0][i] = 1;
            array[7][i] = 1;
        }

        array[3][1] = 1;
        array[3][2] = 1;

        System.out.println("没有进行找路之前:");
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 7; j++) {
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }

//            getWay(array,1,1);
//            System.out.println("找路之后:");
//            for (int i = 0; i < 8; i++) {
//                for (int j = 0; j < 7; j++) {
//                    System.out.print(array[i][j]+" ");
//                }
//                System.out.println();
//        }
        getWay2(array,1,1);
        System.out.println("找到路之后");
        for (int i = 0;i<8;i++){
            for (int j = 0;j<7;j++){
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }

    }

    //创建出迷宫方法

    /*
        1、规定1为墙,2为已经走过的路,3为不通的路,0为没有探索过的路
        2、若map[6][5]为2,则证明找到通路
        3、出迷宫的策略:先下,在右,在上,后上

     */

    //map为地图,i,j为开始的位置
    public static boolean getWay(int[][] map,int i,int j){
        if (map[6][5]==2){  //如果map[6][5]为2,证明找到出口
            return true;
        }else {
            //判断当前位置是否为0;
            if (map[i][j]==0){
                //先将当前位置置为2
                map[i][j] = 2;

                //根据策略进行向下寻找
                //先向下找
                if (getWay(map,i+1,j)){
                    return true;
                }else if (getWay(map,i,j+1)){
                    return true;
                }else if (getWay(map,i-1,j)){
                    return true;
                }else if (getWay(map,i,j-1)){
                    return true;
                }else {
                    map[i][j] = 3;  //如果都没有找到,那么将这个位置置为3,不通
                    return false;
                }

            }
            //当前位置不为0,那么就是1,2,3,返回false
            return false;
        }
    }
    //getWay2采取的策略不同:采取上,右,下,左
    public static boolean getWay2(int[][] map,int i,int j){
        if (map[6][5]==2){  //如果map[6][5]为2,证明找到出口
            return true;
        }else {
            //判断当前位置是否为0;
            if (map[i][j]==0){
                //先将当前位置置为2
                map[i][j] = 2;

                //根据策略进行向下寻找
                //先向下找
                if (getWay2(map,i-1,j)){
                    return true;
                }else if (getWay2(map,i,j+1)){
                    return true;
                }else if (getWay2(map,i+1,j)){
                    return true;
                }else if (getWay2(map,i,j-1)){
                    return true;
                }else {
                    map[i][j] = 3;  //如果都没有找到,那么将这个位置置为3,不通
                    return false;
                }

            }
            //当前位置不为0,那么就是1,2,3,返回false
            return false;
        }
    }

}

注:这里面没有使用图形化界面,只是提供了逻辑代码。并且这里面也没有使用算法实现最短路径问题。这里面只有通过更改小球寻找的策略来改变寻找轨迹

下,右,上,左策略
结果1

上,右,下,左的策略
结果2

发布了24 篇原创文章 · 获赞 5 · 访问量 2069

猜你喜欢

转载自blog.csdn.net/weixin_43288447/article/details/104087836