package com.dai.recursion; public class MiGong { public static void main(String[] args) { //先创建一个二维数组,模拟迷宫 int[][] map = new int[8][7]; //使用1 表示墙 //把上下全置1 for(int i =0; i<7; i++) { map[0][i] = 1; map[7][i] = 1; } //左右全置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[1][2] = 1; map[2][2] = 1; //输出地图 System.out.println("地图情况:"); for(int i=0; i<8; i++) { for(int j=0;j<7;j++) { System.out.printf("%d ",map[i][j]); } System.out.println(); } //使用递归回溯找路 //setWay(map, 1, 1); setWay2(map, 1, 1); //输出新的地图, 小球走过, 并标识过的地图 System.out.println("小球走过并标识过的地图:"); for(int i=0; i<8; i++) { for(int j=0;j<7;j++) { System.out.printf("%d ",map[i][j]); } System.out.println(); } } //使用递归给小球找路 //map 表示地图,i j 表示起始位置。找到路返回True , 否则返回False //map 中0表示没走,1表示墙,2表示通路,3表示该点已走但不 通 public static boolean setWay(int[][] map, int i, int j) { if(map[6][5] == 2) {//通路找到 return true; } else { if(map[i][j] == 0) { //当前路没走,下->右->上->左 走 map[i][j] = 2; 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 if(setWay(map, i, j-1)){ return true; }else { map[i][j] = 3; return false; } } else { return false; } } } public static boolean setWay2(int[][] map, int i, int j) { if(map[6][5] == 2) {//通路找到 return true; } else { if(map[i][j] == 0) { //当前路没走,上->右->下->左 走 map[i][j] = 2; if(setWay2(map, i-1, j)) { return true; } else if(setWay2(map, i, j+1)) { return true; } else if(setWay2(map, i+1, j)) { return true; } else if(setWay2(map, i, j-1)){ return true; }else { map[i][j] = 3; return false; } } else { return false; } } } }