java走迷宫

java走迷宫

回溯算法练习
源码

// 走迷宫
public class Backtracking {
    
    

    // 生成迷宫
    public static int[][] makeMap(){
    
    
        // 创建二维数组
        int[][] map = new int[10][10];
        // 设置迷宫四周
        for(int i = 0;i < 10;i ++){
    
    
            map[0][i] = 1;
            map[9][i] = 1;
            map[i][0] = 1;
            map[i][9] = 1;
        }
        // 设置障碍
        map[1][3] = 1;
        map[2][2] = 1;
        map[3][3] = 1;
        map[4][2] = 1;
        map[5][4] = 1;
        map[6][2] = 1;
        map[6][6] = 1;
        map[7][8] = 1;
        map[7][1] = 1;
        map[8][3] = 1;
        return map;
    }

    // 打印迷宫
    public static void print(int[][] map,String str){
    
    
        System.out.println(str + "为:");
        for(int[] array : map){
    
    
            for(int number : array){
    
    
                System.out.print(number + " ");
            }
            System.out.println();
        }
    }

    // 走迷宫
    public static boolean setWay(int[][] map,int i,int j){
    
    
        // 走到出口处
        if(map[8][8] == 2){
    
    
            return true;
        }else{
    
    
            // 按右,下,上,左走
            // 可通过时
            if(map[i][j] == 0){
    
    
                map[i][j] = 2;
                // 右
                if(setWay(map, i, j + 1))
                    return true;
                // 下
                else if(setWay(map, i + 1, j)){
    
    
                    return true;
                }
                // 左
                else if(setWay(map, i, j - 1)){
    
    
                    return true;
                }
                // 上
                else if(setWay(map, i - 1, j)){
    
    
                    return true;
                }
                // 说明此路不同
                else {
    
    
                    map[i][j] = 3;
                    return false;
                }
            }
            // 此处为1,2,3时
            else
                return false;
        }
    }

    public static void main(String[] args){
    
    
        //生成迷宫
        // 0-可通过,1-墙,不可通过,2-通过的路线,3-死胡同
        int[][] map = makeMap();
        print(map,"迷宫");
        // 走迷宫
        setWay(map, 1, 1);
        // 打印路线-2
        print(map, "路线");
    }

}

结果

迷宫为:
1 1 1 1 1 1 1 1 1 1 
1 0 0 1 0 0 0 0 0 1 
1 0 1 0 0 0 0 0 0 1 
1 0 0 1 0 0 0 0 0 1 
1 0 1 0 0 0 0 0 0 1 
1 0 0 0 1 0 0 0 0 1 
1 0 1 0 0 0 1 0 0 1 
1 1 0 0 0 0 0 0 1 1 
1 0 0 1 0 0 0 0 0 1 
1 1 1 1 1 1 1 1 1 1 
路线为:
1 1 1 1 1 1 1 1 1 1 
1 2 3 1 0 0 0 0 0 1 
1 2 1 0 0 0 0 0 0 1 
1 2 3 1 0 0 0 0 0 1 
1 2 1 0 0 0 0 0 0 1 
1 2 2 2 1 0 0 0 0 1 
1 0 1 2 2 2 1 0 0 1 
1 1 0 0 0 2 2 2 1 1 
1 0 0 1 0 0 0 2 2 1 
1 1 1 1 1 1 1 1 1 1 

猜你喜欢

转载自blog.csdn.net/weixin_46085748/article/details/124931392