迷宫问题

迷宫问题

be025b9beae89ca7464c20f84b3e77b1.pngbe025b9beae89ca7464c20f84b3e77b1.png
图片为一个八行七列的迷宫,要求是圆点从(1,1)开始走迷宫,到(6,5)视为走出迷宫

解决方法

地图初始化

先绘制出迷宫图,用二维数组来表示

        int[][] map = new int[8][7];
        //行置为一
        for (int i = 0; i < 7; i++) {
            map[0][i] = 1;
            map[7][i] = 1;
        }
        //列置为一
        for (int i = 0; i < 8; i++) {
            map[i][0] = 1;
            map[i][6] = 1;
        }
        map[3][1] = 1;
        map[3][2] = 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.print("\n");
        }

此时的地图样式为
11cfec811dd0a63f82649669735b03d8.png11cfec811dd0a63f82649669735b03d8.png

找到迷宫路径

接下来使用递归的思想来解决迷宫问题

  • findway方法是用来找到出迷宫的路径的
  • 如果找到路径就返回true,找不到则返回false
  • (i,j)是用来表示圆点的位置的
  • map数组用来表示迷宫
  • 在代码块中,0表示可以通行,1表示障碍物,2表示该路可以通行并且已经走过,3表示此路走过但是是一个死路
  • 代码的结束条件是map[6][5] = 2,表明圆点已经走到过终点
  • 圆点的走路策略先定为 下 -> 右 ->上 -> 左
    代码的实现如下:
    public boolean findway(int[][] map, int i, int j) {
        if (map[6][5] == 2) {  //说明已经到达终点
            return true;
        } else {
            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 - 1, j)) {
                    return true;
                } else if (findway(map, i, j - 1)) {
                    return true;
                } else {
                    map[i][j] = 3;  //下右上左都走不通表明这是一个死路,置为3
                    return false;
                }
            }else{  //map[i][j]= 1,2,3
                return false;
            }
        }
    }

代码执行

接下来需要在main中调用T类中的findway方法来找到路径

        T t1 = new T();  //T类是用来寻找路径的
        
        t1.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.print("\n");
        }

代码执行完成后找到的路径为
c52b2881808a524cfbf4b932c18a2dcd.pngc52b2881808a524cfbf4b932c18a2dcd.png
当然也可以改变地图的样式或者找路的策略,此时找到的路径会随之变化,或者无法找到路径

posted @ 2022-07-02 17:14  AINIBYM  阅读(118)  评论(0)    收藏  举报