我们可以把迷宫当成一个二位数组,其中1代表障碍物,走不了,初始化一个二维数组,设置好障碍物
//老鼠迷宫
int[][] map = {
{1,1,1,1,1,1,1,1},
{1,0,0,0,0,0,0,1},
{1,1,0,0,0,0,0,1},
{1,0,1,0,0,0,0,1},
{1,0,0,0,1,0,0,1},
{1,0,1,1,0,0,1,1},
{1,1,0,0,0,0,0,1},
{1,1,1,1,1,1,1,1},
};
从全局上来看,老鼠的线路应该是如下的,才能走出迷宫,但实际上,老鼠需要绕路,遇到障碍物回头才对。
思路:
1.设老鼠的行进路线都是优先选择下->右->上->左。
2.设老鼠很聪明,走过的路线走撒泡尿,表示鼠大爷到此一游,我们可以把数组的值改为3,表示走过,但走不通。
3.这是一个int[8][8]的二位数组,那么开始位置下标是1,1,结束位置是6,6。行和列分别用、j表示。
4.实际路线我们可以设置2表示,我们可以使用递归,让老鼠不断测试路线。
5.最后打印数组,看老鼠的实际路线。
代码如下:
public boolean mouseMaze(int[][] map,int i,int j) {
if(map[6][6] == 2) {
return true;
}else {
if(map[i][j] == 0) {
map[i][j] = 2;//假设是可以走的
if(mouseMaze(map,i + 1, j)) {//向下走
return true;
} else if(mouseMaze(map,i,j + 1)) {//向右走
return true;
} else if(mouseMaze(map,i - 1,j)) {//向上走
return true;
} else if(mouseMaze(map,i,j - 1)) {//向左走
return true;
} else {
map[i][j] = 3;
return false;
}
}else{
return false;
}
}
}
打印二维数组,数据结果为:
可以看到,符合我们预期,并且老鼠在其中是走过弯路的,在4,5,6行碰壁后退回,重新选择了路线。