迷宫问题java,dfs
时间: 2023-10-17 16:17:49 浏览: 101
好的,下面是一个简单的 Java 代码实现,使用深度优先搜索(DFS)算法解决迷宫问题:
```java
import java.util.Scanner;
public class Maze {
private static int[][] maze; // 迷宫数组
private static int rows, cols; // 迷宫行数和列数
private static boolean[][] visited; // 记录是否访问过
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入迷宫行数:");
rows = scanner.nextInt();
System.out.print("请输入迷宫列数:");
cols = scanner.nextInt();
// 初始化迷宫数组和visited数组
maze = new int[rows][cols];
visited = new boolean[rows][cols];
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
System.out.print("请输入第 " + (i + 1) + " 行,第 " + (j + 1) + " 列的迷宫数据(0 表示通路,1 表示障碍物):");
maze[i][j] = scanner.nextInt();
visited[i][j] = false;
}
}
// DFS求解迷宫路径
dfs(0, 0);
scanner.close();
}
// 深度优先搜索
private static void dfs(int x, int y) {
if (x < 0 || x >= rows || y < 0 || y >= cols || maze[x][y] == 1 || visited[x][y]) {
return; // 如果越界、是障碍物或已经访问过,则返回
}
visited[x][y] = true; // 标记为已访问
if (x == rows - 1 && y == cols - 1) {
printPath(); // 如果到达了终点,则输出路径
return;
}
// 分别向上、下、左、右四个方向继续搜索
dfs(x - 1, y); // 上
dfs(x + 1, y); // 下
dfs(x, y - 1); // 左
dfs(x, y + 1); // 右
visited[x][y] = false; // 回溯,恢复为未访问状态
}
// 输出路径
private static void printPath() {
System.out.println("找到了一条路径:");
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
if (visited[i][j]) {
System.out.print("★ ");
} else {
System.out.print(maze[i][j] + " ");
}
}
System.out.println();
}
System.out.println();
}
}
```
这个代码可以让用户输入迷宫的行数和列数,然后逐个输入迷宫中每个位置的数据(0表示通路,1表示障碍物),最后使用DFS算法求解出迷宫的路径,并输出路径。
阅读全文