Java—走迷宫

构造迷宫

用Java代码写出二维数组。其中:

  • 0表示未走通路
  • 1表示障碍物
  • 2表示通路
  • 3表示死路
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;
        map[2][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]+"\t");
            }
            System.out.println();
        }

使用递归回溯的思路走出迷宫,定义一个方法寻找走出迷宫的路,找到返回,找到返回true否则返回false。

i,j表示坐标初始化为1,1。当出口坐标等于2时表示找到出路。

移动策略

按照下右上左的顺序判断移动

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;
                return false;
            }

            }else{
                return false;
            }

完整代码

public class maze {
    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 i=0;i<8;i++){
            map[i][0]=1;
            map[i][6]=1;
        }
        map[3][1]=1;
        map[3][2]=1;
        map[2][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]+"\t");
            }
            System.out.println();
        }
        Move run=new Move();
        run.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]+"\t");
            }
            System.out.println();
        }
    }
}
class Move{
    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;
                return false;
            }

            }else{
                return false;
            }
        }
    }
}

 

posted @ 2026-07-17 13:46  Dr丶云幕  阅读(8)  评论(0)    收藏  举报