目录
1.迷宫地图
我们使用二维数组打印迷宫地图,1表示障碍物,0表示没有障碍物。
代码实现:
int map[][] = new int[8][7];
for(int i = 0 ; i< 7; i++){
map[0][i]=1;//1表示障碍物
map[7][i]=1;
}
//打印第一列和最后一列的障碍物
for(int i = 0 ; i< 8 ; i++){
map[i][0] = 1;
map[i][6] = 1;
}
map[3][2]=1;//具体的障碍点设置
map[3][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] + " " );
}
System.out.println();//每输出一行后就换行
}
地图效果:
扫描二维码关注公众号,回复:
15603222 查看本文章
2.走迷宫
我们假设:0表示没有障碍物 1表示障碍物 2 表示假设可以走 3 表示可以走但是走不通。
如果找到出路 返回true 没有找到 返回false
思路:创建一个方法findway用于找路,我们使用递归时,把递归结束条件写在程序前面,如果小老鼠在数组出口位置时,该数组元素等于2,则返回true。找路完成,其他在没有障碍物的情况下我们假设该位置为2,然后使用递归去上下左右去走,能走就返回true,如果这条路能走但是走不通赋值为3并且就返回false。
代码实现:
//0表示没有障碍物 1表示障碍物 2 表示假设可以走 3 表示可以走但是走不通
//如果找到出路 返回true 没有找到 返回false
class M{
public boolean findway(int map[][],int i,int j){//实现找路功能
if(map[6][5]==2){
return true;
//递归结束条件 当小老鼠走到出口时结束递归
}else {
if(map[i][j] == 0){//如果当前位置没有障碍物
map[i][j] = 2;//0表示没有障碍物可以走
if(findway(map , i+1 ,j)){//下
return true;
}else if(findway(map , i ,j+1)){//右
return true;//下
}else if(findway(map , i-1 ,j-1)){//上
return true;
}else if(findway(map , i , j-1)){//左
return true;
}else{
map[i][j]=3;//3表示能走但是走不通
return false;
}
}else{
return false;
}
}
}
}
代码效果:
我们估计把小老鼠初始位置周边堵死看会出现什么情况,不出意外应该会生成3。小老鼠走迷宫用到了一点点的回溯。