小球只能走绿色方块碰到红色的墙不能走
- 第一步首先要构造出迷宫(8行7列),1代表墙,0代表绿色方块
第一行和最后一行的墙
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;
}
输出结果
构建障碍,最终的效果如下
- 构建好地图之后,第二步就开始找路
定义规则
数字0代表墙
数字1代表墙
数字2代表可走
数字3代表已经走过且不可走
先从当前点下开始走,如果不可走就往右走,右不能走就往上走,上不能走就往左走
开始用代码实现
public static boolean findWay(int map[][], int i, int j) {
//结束点
if (map[6][5] == 2) {
return true;
}
if (map[i][j] == 0) {
//第一步 为 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 {
//都走不通,标记为3
map[i][j] = 3;
return false;
}
} else {
//不为0 可能是1,2,3
return false;
}
}
运行结果小球已经走出来了
完整实现代码
public class MazeTest {
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;
System.out.println("初始迷宫 ");
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 7; j++) {
System.out.print(map[i][j] + " ");
}
System.out.println();
}
//开始找路
findWay(map, 1, 1);
System.out.println("小球走过轨迹 ");
for (int i = 0; i < 8; i++) {
for (int j = 0; j < 7; j++) {
System.out.print(map[i][j] + " ");
}
System.out.println();
}
}
public static boolean findWay(int map[][], int i, int j) {
//结束点
if (map[6][5] == 2) {
return true;
}
if (map[i][j] == 0) {
//第一步 为 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 {
//都走不通,标记为3
map[i][j] = 3;
return false;
}
} else {
//不为0 可能是1,2,3
return false;
}
}
}
小球得到的路径和,设置的找路策略相关,找路的上下左右顺序都有关