java迷宫问题 bfs
时间: 2023-11-10 16:03:48 浏览: 99
好的,关于Java迷宫问题的BFS算法,我可以给您提供以下思路:
1. 首先需要定义一个二维数组来表示迷宫,0表示可以通过的路,1表示障碍物;
2. 定义一个队列来存储待访问的节点;
3. 将起点加入队列,并将其标记为已访问;
4. 对于队列中的每个节点,分别向上、下、左、右四个方向进行探索,如果该方向上的节点未被访问过且可以通过,则将其加入队列,并标记为已访问;
5. 直到队列为空或者找到终点为止。
以下是Java代码实现:
```java
import java.util.LinkedList;
import java.util.Queue;
public class MazeBFS {
public static int[][] directions = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}}; // 上下左右四个方向
public static boolean bfs(int[][] maze, int[] start, int[] dest) {
int m = maze.length, n = maze[0].length;
boolean[][] visited = new boolean[m][n]; // 标记是否访问过
Queue<int[]> queue = new LinkedList<>();
queue.offer(start);
visited[start[0]][start[1]] = true;
while (!queue.isEmpty()) {
int[] cur = queue.poll();
if (cur[0] == dest[0] && cur[1] == dest[1]) {
return true;
}
for (int[] dir : directions) {
int x = cur[0] + dir[0], y = cur[1] + dir[1];
if (x >= 0 && x < m && y >= 0 && y < n && !visited[x][y] && maze[x][y] == 0) {
queue.offer(new int[]{x, y});
visited[x][y] = true;
}
}
}
return false;
}
public static void main(String[] args) {
int[][] maze = {{0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 1, 0}, {1, 1, 0, 1, 1}, {0, 0, 0, 0, 0}};
int[] start = {0, 4}, dest = {4, 4};
System.out.println(bfs(maze, start, dest));
}
}
```
阅读全文