回溯的思想:当一条路走不通,就回到这条路的起点,走下一条路。使用递归来实现。
public static void main(String[] args){ int [][]map=new int[8][7]; //使用1表示墙 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; //输出地图 for(int i=0;i<8;i++){ for(int j=0;j<7;j++){ System.out.println(map[i][j]) } System.out.println(); } //使用递归回溯来给小球找路 /* map表示地图 * i,j 从哪个位置开始找 * 假设从6,5位置结束 * 如果找到通路,返回true,否则返回false * 约定: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; } }