推荐星级:
  • 1
  • 2
  • 3
  • 4
  • 5

用广度优先搜索求解迷宫最短路径的Java实现

更新时间:2026-10-17 12:21:34 大小:38K 上传用户:潇潇江南查看TA发布的资源 标签:BFSMaze Shortest PathJavaAlgorithmQueue 下载积分:2分 评价赚积分 (如何评价?) 打赏 收藏 评论(0) 举报

资料介绍

用广度优先搜索求解迷宫最短路径的Java实现 问题定义 给定一个 的迷宫网格,其中 0 表示可通行、1 表示障碍物,求从起点到终点的最短路径长度(步数)。只能上下左右移动,每次一步。 例如一个 3×3 迷宫,起点 (0,0)、终点 (2,2),中间无障碍时最短步数为 4。 算法思路 求无权图的最短路径,广度优先搜索(BFS)最合适,因为 BFS 按层扩展,首次到达某节点的步数一定最短。用队列存储待扩展位置并记录步数。 BFS 步骤: 起点入队,标记访问。 每次取出队首,向四方向尝试移动。 可通行且未访问的位置入队,记录步数 + 1。 首次到达终点即返回该步数。 Java 代码实现 javaimport java.util.LinkedList;import java.util.Queue;public class MazeShortestPath { public int shortestPath(int[][] maze, int[] start, int[] end) { int n = maze.length, m = maze[0].length; boolean[][] visited = new boolean[n][m]; Queue

queue = new LinkedList<>(); queue.offer(new int[]{start[0], start[1], 0}); visited[start[0]][start[1]] = true; int[] dx = {1, -1, 0, 0}; int[] dy = {0, 0, 1, -1}; while (!queue.isEmpty()) { int[] cur = queue.poll(); int x = cur[0], y = cur[1], step = cur[2]; if (x == end[0] && y == end[1]) return step; for (int k = 0; k < 4; k++) { int nx = x + dx[k], ny = y + dy[k]; if (nx >= 0 && nx < n && ny >= 0 && ny < m && !visited[nx][ny] && maze[nx][ny] == 0) { visited[nx][ny] = true; queue.offer(new int[]{nx, ny, step + 1}); } } } return -1; // 无法到达 } public static void main(String[] args) { int[][] maze = { {0, 0, 0}, {0, 1, 0}, {0, 0, 0} }; System.out.println(new MazeShortestPath() .shortestPath(maze, new int[]{0,0}, new int[]{2,2})); // 输出 4 }} 为什么BFS保证最短 BFS 严格按照距离分层扩展:第 层的节点都是恰好走 步可达的。当首次访问终点时,它一定位于最浅的层,因此其步数就是全局最短路径长度。 复杂度分析 时间复杂度:每个格子最多入队一次,。 空间复杂度:队列与标记数组,。 Java语言要点 Java 的 Queue可存放包含坐标与步数的数组;LinkedList 实现队列;boolean[][] 二维标记数组初始化为 false,代码结构清晰。 应用与扩展 BFS 求最短路径广泛用于网格寻路、社交网络最短关系链、无权图最短路等场景。 迷宫最短路径的 Java 实现用 Queue 配合 visited 二维数组与步数记录,首次到达终点即返回最短步数,在 O(nm) 时间内求解。

部分文件列表

文件名 大小
用广度优先搜索求解迷宫最短路径的Java实现.docx 38K

全部评论(0)

暂无评论

上传资源 上传优质资源有赏金

  • 打赏
  • 30日榜单

推荐下载