二维数组是建模迷宫最直观方式,推荐int[][]或char[][]:0/'.'表通路、1/'#'表墙、'S'/'E'标起止;用方向数组{{-1,0},{0,1},{1,0},{0,-1}}简化上下左右移动,配合边界与通行性检查;DFS适合找任意路径(需回溯),BFS天然求最短路径(需队列与parent记录)。

用二维数组建模迷宫是 Java 初学者掌握算法思维最扎实的入口——结构清晰、坐标直观、调试方便,不需要额外依赖,几行代码就能跑通一条路径。
迷宫数据怎么存才合理
推荐用 int[][] 或 char[][],语义明确且扩展性强:
- int[][] map:0 表示空地,1 表示墙,2 标记起点,3 标记终点,后续还能加 4(已访问)、5(路径点)等
- char[][] maze:'.' 表通路,'#' 表墙,'S' 和 'E' 直观标识起止,打印时也更友好
- 边界处理建议统一设墙:比如第 0 行、最后一行、第 0 列、最后一列全赋值为 1 或 '#',省去大量越界判断
怎么让程序“知道”上下左右怎么走
别写四次 if,用方向数组一劳永逸:
- 定义 int[][] dirs = {{-1, 0}, {0, 1}, {1, 0}, {0, -1}}; —— 依次对应上、右、下、左
- 对当前位置 (r, c),遍历 dirs 得到新坐标:nr = r + dirs[i][0],nc = c + dirs[i][1]
- 每次移动前检查三件事:nr 是否在 [0, rows),nc 是否在 [0, cols),map[nr][nc] 是否为可通行值(如 0 或 '.')
DFS 和 BFS 选哪个?怎么搭骨架
两者都依赖二维数组,但目标不同:
立即学习“Java免费学习笔记(深入)”;
- DFS(递归/栈):适合找任意一条通路,代码短。核心是“尝试→失败则回退”,用 boolean[][] visited 防环,路径可用 List<int[]> 记录,回溯时 removeLast
- BFS(队列):天然求最短步数。队列存 int[]{r, c, step} 或封装 Point 类;另用 int[][] dist 记录最短距离,或 int[][] parent 存前驱坐标,便于终点反推完整路径
- 无论哪种,地图数据(wall/pass)和搜索状态(visited/dist/parent)必须分离,避免逻辑污染
路径找到了,怎么让人一眼看懂
可视化不是加分项,是调试刚需:
- 把最终路径上的每个坐标 (r, c) 对应的 map[r][c] 改成 '*'(注意避开 'S' 和 'E',可先备份原值)
- 逐行输出:对每行 char[] row,用 new String(row) 转字符串再打印,整齐又省事
- 如果想看坐标流,直接遍历路径 List,格式化输出:"(" + p[0] + "," + p[1] + ")",用 " → " 连接



















