多维数组是表示迷宫最直观的方式,用二维数组(如char[][])建模,0或'.'表通路,1或'#'表墙,'s'为起点,'e'为终点,索引i直接对应行列位置,遍历时需注意边界检查。

用多维数组表示迷宫是最直观的方式,它天然对应地图的行列结构,配合深度优先搜索(DFS)或广度优先搜索(BFS),就能可靠地找出路径。
用二维数组建模迷宫
迷宫通常用 char[][] 或 int[][] 表示:0(或'.')代表可通行,1(或'#')代表墙,起点标记为'S',终点为'E'。数组索引 [i][j] 直接对应第 i 行、第 j 列的位置,无需额外坐标转换。
- 初始化时逐行读入字符串,转为字符数组存入二维数组
- 遍历时用两个嵌套 for 循环,i 从 0 到 rows-1,j 从 0 到 cols-1
- 注意边界检查:访问 arr[i][j] 前确保 0 ≤ i
DFS递归查找路径(带回溯)
适合找任意一条可行路径,代码简洁,但不保证最短。关键是在递归中记录当前路径,并在返回前撤销选择(回溯)。
- 定义方向数组:int[][] dirs = {{-1,0},{0,1},{1,0},{0,-1}},分别表示上右下左
- 递归函数参数包含当前坐标 (x, y)、路径列表(如 List
)和 visited 标记数组 - 到达终点时保存路径并返回 true;否则对四个方向尝试,若某方向可行则递归,失败则 removeLast 回溯
- visited 数组防止重复访问同一格子,可在进入时设为 true,退出时设为 false(配合回溯)
BFS查找最短路径
利用队列按层扩展,首次抵达终点时的步数即为最短距离,还可通过父节点记录还原完整路径。
- 队列中存储坐标 + 当前步数(或单独用 step 变量控制层数)
- 另设 parent[i][j] 存储到达 (i,j) 的前一个坐标,类型可为 int[2] 或自定义 Point
- 每扩展一个位置,若未访问过且非墙,则入队并更新 parent 和 visited
- 找到终点后,从终点沿 parent 数组反向追溯到起点,再反转即得正向路径
路径可视化与输出
找到路径后,可在原迷宫数组上标记路径点(如用 '*'),再逐行打印,直观展示行走路线。
- 将路径中每个坐标 (x,y) 对应的 maze[x][y] 改为 '*'(注意避开起点 'S' 和终点 'E',或保留原符号)
- 打印时,每行字符用 new String(row) 转换,或用 String.valueOf() 拼接
- 也可单独输出坐标序列,例如:(0,0) → (0,1) → (1,1) → … → (4,4)











