4127迷宫问题java
时间: 2023-10-14 15:08:48 浏览: 83
基于java解决迷宫程序
迷宫问题可以使用深度优先搜索(DFS)或广度优先搜索(BFS)来解决,这里我给你提供一下DFS的Java代码。
首先定义一个迷宫类Maze,包含一个二维字符数组表示迷宫地图,起点和终点坐标的行列值,以及一个布尔类型的visited数组表示该点是否被访问过。
```java
class Maze {
char[][] map; // 迷宫地图
int startRow, startCol; // 起点坐标
int endRow, endCol; // 终点坐标
boolean[][] visited; // 标记该点是否被访问过
Maze(char[][] map, int startRow, int startCol, int endRow, int endCol) {
this.map = map;
this.startRow = startRow;
this.startCol = startCol;
this.endRow = endRow;
this.endCol = endCol;
visited = new boolean[map.length][map[0].length];
}
}
```
下面是DFS的实现代码,使用递归的方式进行搜索。搜索过程中,先判断当前节点是否为终点,如果是,则直接返回true;否则,遍历当前节点的四个方向,如果该方向上的节点未被访问且可达,则继续递归搜索该节点。如果四个方向都搜索完毕后仍未找到解,则返回false。
```java
public boolean dfs(Maze maze, int row, int col) {
// 到达终点
if (row == maze.endRow && col == maze.endCol) {
return true;
}
// 标记该点已访问
maze.visited[row][col] = true;
// 遍历四个方向
if (row > 0 && maze.map[row - 1][col] != '#' && !maze.visited[row - 1][col]) {
if (dfs(maze, row - 1, col)) {
return true;
}
}
if (row < maze.map.length - 1 && maze.map[row + 1][col] != '#' && !maze.visited[row + 1][col]) {
if (dfs(maze, row + 1, col)) {
return true;
}
}
if (col > 0 && maze.map[row][col - 1] != '#' && !maze.visited[row][col - 1]) {
if (dfs(maze, row, col - 1)) {
return true;
}
}
if (col < maze.map[0].length - 1 && maze.map[row][col + 1] != '#' && !maze.visited[row][col + 1]) {
if (dfs(maze, row, col + 1)) {
return true;
}
}
// 四个方向都搜索完毕,未找到解
return false;
}
```
最后,调用dfs方法即可得到是否存在从起点到终点的路径。
```java
char[][] map = {
{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'},
{'#', '.', '#', '.', '.', '.', '#', '.', '.', '#'},
{'#', '.', '#', '.', '#', '.', '#', '#', '.', '#'},
{'#', '#', '.', '.', '#', '.', '.', '.', '.', '#'},
{'#', '.', '#', '#', '.', '#', '#', '#', '.', '#'},
{'#', '.', '.', '.', '.', '.', '.', '.', '.', '#'},
{'#', '#', '#', '#', '#', '#', '#', '#', '#', '#'}
};
Maze maze = new Maze(map, 1, 1, 4, 8); // 起点(1, 1),终点(4, 8)
boolean hasPath = dfs(maze, maze.startRow, maze.startCol);
System.out.println(hasPath ? "存在路径" : "不存在路径");
```
阅读全文