java递归--迷宫问题
1.规则:0表示可以走 1表示障碍物 2 表示走的路线 3 表示上下左右都走过,但是走不通是死路;
2.地图绘制
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;
}//最左边和最右边为1

障碍物可以自行添加如:map[3][1]=1,map[3][2]=1;
3.函数构建(在类中使用,对象来调用)
public boolean findWay(int[][] map,int i,int j){ if(map[6][5]==2){ return true; //到这里就结束了 不会进入其他if else了 }else{ //在没到终点的情况下,才去进行找路 if(map[i][j]==0){ map[i][j]=2; if(findWay(map,i+1,j)){ //判断下一个位置是否符合要求是否到终点或者是等于0,符合的话,就进入新一轮的循环 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{ //map[i][j]=1,2,3,2表示已经走过了的路线 return false; } } }
4.回溯
返回true就进入下一轮,下一轮返回false 就返回上一轮,下一轮前后左右都走不了了或者进入已经走过的路线或者碰过障碍物从而返回上一轮的现象就是回溯;
简单的说,回溯可以通过改变障碍物的布局来产生回溯,从而改变路线;
5.调用
int[][] map=new int[8][7]; cat1.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]); }

6.心得:
首先迷宫问题需要制定规则,比如0代表什么,因为0是默认的值,最好是0代表可以走的路,1代表什么,接着就是设置边界,最外面一层都是边界,使用for循环设置边界,最后使用for循环产生地图;
其次就是函数得构造,返回值是boolean类型,返回true就进入下一轮,返回false就返回上一轮,到终点后就退出循环,根据终点来设置程序,采用if-else结构;
最后使用对象进行调用;
浙公网安备 33010602011771号