1 迷宫问题介绍
如图一个8X7的迷宫图,橙色部分是围墙,绿色部分是出口,现在设计从任意一个位置走到出口的算法
![](https://i-blog.csdnimg.cn/blog_migrate/936f2859dc338797f62359df6c6f17d1.jpeg)
2 代码实现
public class Maze {
private int[][] buildMaze() {
int row = 8;
int col = 7;
int[][] nums = new int[row][col];
for (int i = 0; i < row; i++) {
nums[i][0] = 1;
nums[i][col - 1] = 1;
}
for (int i = 0; i < col; i++) {
nums[0][i] = 1;
nums[row - 1][i] = 1;
}
nums[3][1] = 1;
nums[3][2] = 1;
return nums;
}
private void printMaze(int[][] nums) {
for (int[] row : nums) {
for (int num : row) {
System.out.print(num + "\t");
}
System.out.println();
}
}
/**
* @param maze
* @param row 即将探索的位置行
* @param col 即将探索的位置列
*/
private boolean setWay(int[][] maze, int row, int col) {
//如果出口坐标已走通,则游戏结束
if (maze[6][5] == 2) {
return Boolean.TRUE;
} else {
if (maze[row][col] == 0) {
// 该位置还未探索,假定该位置可以走通
maze[row][col] = 2;
// 这里简化处理,仅向下或向左右走
if (setWay(maze, row + 1, col)) {
// 向下走
return Boolean.TRUE;
} else if (setWay(maze, row, col - 1)) {
// 向左走
return Boolean.TRUE;
} else if (setWay(maze, row, col + 1)) {
// 向右走
return Boolean.TRUE;
} else {
// 此路不通
maze[row][col] = 3;
return Boolean.FALSE;
}
}else {
return Boolean.FALSE;
}
}
}
@Test
public void test() {
int[][] maze = buildMaze();
printMaze(maze);
setWay(maze, 1, 1);
System.out.println("------------------------------");
printMaze(maze);
}
}
输出