You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

递归函数实现迷宫路径遍历问题求助:代码无法运行

解决迷宫路径遍历的问题

你的代码思路方向是对的,但有几个关键细节问题导致无法正常输出正确路径,我来帮你一一排查并修正:

问题分析

  1. 数组引用传递的陷阱:
    你直接把previousCols数组传入递归函数,而数组是引用类型,所有递归分支都会修改同一个数组实例,导致不同路径的列索引互相干扰,最终输出的路径会混乱重叠。

  2. 终止条件判断错误:
    迷宫的行数是从0到3(共4行),当row等于3时已经到达最后一行,应该停止递归并输出路径。原代码里row < m会让递归继续执行到row=4才停止,这时候路径会多出来无效的一步。

  3. 列边界判断逻辑错误:
    列索引的有效范围是0到3,col + 1不能超过3,所以判断右下方单元格是否存在的条件应该是col < m - 1而不是col < m,否则会尝试访问不存在的列(索引4)。

修正后的代码

const m = 4;
const maze = [
  [1, 2, 3, 4],
  [5, 6, 7, 8],
  [9, 10, 11, 12],
  [13, 14, 15, 16]
];

const getPaths = (previousCols, row, col) => {
  // 创建新数组副本,确保每个递归分支的路径独立
  const currentPath = [...previousCols, col];
  
  // 到达最后一行时直接输出路径
  if (row === m - 1) {
    console.log(currentPath);
    return;
  }

  // 向下移动到正下方单元格
  getPaths(currentPath, row + 1, col);
  // 向下移动到左下方(列索引大于0时才允许)
  if (col > 0) {
    getPaths(currentPath, row + 1, col - 1);
  }
  // 向下移动到右下方(列索引小于最大索引时才允许)
  if (col < m - 1) {
    getPaths(currentPath, row + 1, col + 1);
  }
};

// 遍历顶部4个起始单元格,逐个发起路径查找
for (let i = 0; i < m; i++) {
  getPaths([], 0, i);
}

代码说明

  • 数组副本处理:每次递归时用[...previousCols, col]创建新的数组,确保每个递归分支的路径都是独立的,不会被其他分支修改。
  • 正确的终止逻辑:当row === m - 1时,说明已经走到迷宫最后一行,直接输出当前路径即可。
  • 修正列边界判断:col < m - 1保证右下方的单元格存在,避免出现数组越界访问的问题。

运行这段代码后,就能正确输出所有符合要求的路径,你示例中的[3, 2, 2, 1]也会包含在输出结果里。

内容的提问来源于stack exchange,提问作者Kylo TheDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:13:10