利用回溯算法解决迷宫问题(java)
时间: 2023-07-30 10:11:39 浏览: 84
Java实现走迷宫回溯算法
好的,以下是一个基于Java语言的迷宫问题回溯算法解决方案:
```java
import java.util.Scanner;
public class MazeSolver {
private static int[][] maze;
private static int[][] solution;
private static int size;
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入迷宫大小:");
size = scanner.nextInt();
maze = new int[size][size];
solution = new int[size][size];
System.out.println("请输入迷宫(0表示可以通过,1表示障碍物):");
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
maze[i][j] = scanner.nextInt();
}
}
if (solveMaze(0, 0)) {
System.out.println("迷宫有解:");
printSolution();
} else {
System.out.println("迷宫无解。");
}
scanner.close();
}
private static boolean solveMaze(int x, int y) {
if (x == size - 1 && y == size - 1) {
solution[x][y] = 1;
return true;
}
if (isSafe(x, y)) {
solution[x][y] = 1;
if (solveMaze(x + 1, y)) {
return true;
}
if (solveMaze(x, y + 1)) {
return true;
}
solution[x][y] = 0;
return false;
}
return false;
}
private static boolean isSafe(int x, int y) {
return (x >= 0 && x < size && y >= 0 && y < size && maze[x][y] == 0);
}
private static void printSolution() {
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
System.out.print(solution[i][j] + " ");
}
System.out.println();
}
}
}
```
这个程序中,我们首先读入迷宫的大小和迷宫本身,然后使用 `solveMaze` 方法来解决迷宫问题。如果当前位置是终点,则返回 true;否则,检查当前位置是否为安全位置,如果是,则标记这个位置,并分别尝试向下和向右移动,如果有一条路可以到达终点,则返回 true,否则,回溯到上一步,并标记当前位置为不可行。
最后,我们使用 `printSolution` 方法来打印出可行的路径。
阅读全文