Java—走迷宫
构造迷宫
用Java代码写出二维数组。其中:
- 0表示未走通路
- 1表示障碍物
- 2表示通路
- 3表示死路
int map[][]=new int[8][7];
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;
map[2][2]=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]+"\t");
}
System.out.println();
}
使用递归回溯的思路走出迷宫,定义一个方法寻找走出迷宫的路,找到返回,找到返回true否则返回false。
i,j表示坐标初始化为1,1。当出口坐标等于2时表示找到出路。
移动策略
按照下右上左的顺序判断移动
if (map[6][5]==2){ // 判断是否到达终点
return true;
}
else {
if (map[i][j]==0){ // 表示可以移动到该位置
map[i][j]=2; //标记走过的地方
// 运动策略:从下右上左顺序执行
if(findWay(map,i+1,j)){ //下
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{
return false;
}
完整代码
public class maze {
public static void main(String[] args){
int map[][]=new int[8][7];
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;
map[2][2]=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]+"\t");
}
System.out.println();
}
Move run=new Move();
run.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]+"\t");
}
System.out.println();
}
}
}
class Move{
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; //标记走过的地方
// 运动策略:从下右上左顺序执行
if(findWay(map,i+1,j)){ //下
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{
return false;
}
}
}
}

浙公网安备 33010602011771号