java走迷宫回溯算法
时间: 2023-07-10 10:05:03 浏览: 129
走迷宫的回溯算法通常使用深度优先搜索(DFS)来实现。下面是Java实现的示例代码:
```java
public class Maze {
private int[][] maze; // 迷宫地图
private int startX, startY; // 起始位置坐标
private int endX, endY; // 结束位置坐标
private boolean[][] visited; // 记录是否已经访问过
private int[][] directions = {{1, 0}, {-1, 0}, {0, 1}, {0, -1}}; // 上下左右四个方向
public Maze(int[][] maze, int startX, int startY, int endX, int endY) {
this.maze = maze;
this.startX = startX;
this.startY = startY;
this.endX = endX;
this.endY = endY;
this.visited = new boolean[maze.length][maze[0].length];
}
public void solve() {
dfs(startX, startY);
}
private void dfs(int x, int y) {
if (x < 0 || x >= maze.length || y < 0 || y >= maze[0].length || maze[x][y] == 1 || visited[x][y]) {
// 超出边界、遇到障碍物、已经访问过,都不再继续搜索
return;
}
visited[x][y] = true; // 标记为已访问
if (x == endX && y == endY) {
// 到达终点,输出路径
printPath();
return;
}
for (int[] direction : directions) {
dfs(x + direction[0], y + direction[1]); // 搜索下一个位置
}
visited[x][y] = false; // 恢复为未访问状态
}
private void printPath() {
// 输出路径
}
}
```
其中,`maze`是迷宫地图,`startX`和`startY`是起始位置坐标,`endX`和`endY`是结束位置坐标。`visited`是一个布尔数组,用于记录每个位置是否已经访问过。`directions`是一个二维数组,用于表示上下左右四个方向。`dfs`方法是实现深度优先搜索的核心代码,`printPath`方法用于输出路径。调用`solve`方法开始搜索。
阅读全文