1.利用二维数组创建一个地图map[][];
做出以下约定:
- 坐标值为1表示墙壁
- 坐标值为0表示没有探测过的地方
- 坐标值为2表示探测过的地方
设定一个开始坐标,表示探测器在地图上的初始位置
设置初始的地图如上图,这里我随机添加了几个障碍
设置map[1][1]为起始点
设置map[6][6]为终点,当探测器走到这个点的时候代表探测完成
实现代码如下
public class Labyrinth {
int[][] map;
// 创建方法用于定义地图
public void creatMap(int x,int y) {
//创建一个二维数组表示一张8*8的地图 map
map = new int[x][y];
// map[x][y] = 1表示该坐标为墙
// map[x][y] = 0表示该坐标没有被探索过
// map[x][y] = 2表示该坐标是被探索过的通路
// map[x][y] = 3表示该坐标是被探索过的不可行通道
// 创建外墙
for(int i = 0 ; i < x ; i++) {
for (int j = 0; j < y; j++) {
map[0][j] = 1; // 上边框
map[i][0] = 1; // 左边框
map[x-1][j] = 1; // 下边框
map[i][y-1] = 1; // 右边框
}
}
}
// 创建方法用于显示迷宫
public void show() {
System.out.println(map.length);
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("");
}
}
// 创建方法用来探路
public boolean explore(int x ,int y) {
// x,y 代表初始坐标
// 当坐标为6,6的值为2代表整条路通
if(map[6][6] == 2 ) { // 如果终点坐标等于2那么表示走到了终点
return true;
}else if(map[x][y] == 0) { // 如果所在位置为0将状态改为2表示已经走过了
map[x][y] = 2;
explore(x,y);
return false;
}else if(map[x][y] == 2) { // 按照上右下左的顺序开始探路
if(map[x-1][y] == 0) { // 向上探路
explore(x-1,y);
return false;
}else if(map[x][y+1] == 0) { // 向右探路
explore(x,y+1);
return false;
}else if(map[x+1][y] == 0) { // 向下探路
explore(x+1,y);
return false;
}else if(map[x][y-1] == 0) {
explore(x,y-1);
return false;
}else {
return false;
}
}else {
return false;
}
}
}
测试代码
public class LabyrinthTest {
public static void main(String[] args) {
Labyrinth lab = new Labyrinth();
lab.creatMap(8, 8);
// int[] a = {1,2,3,4};
// for(int i = 0 ; i < a.length ; i++) {
// System.out.println(a[i]);
// }
lab.map[2][1] = 1;
lab.map[2][2] = 1;
lab.map[2][3] = 1;
lab.show();
lab.explore(1, 1);
lab.show();
}
}
最终的运行效果如下