You need to enable JavaScript to run this app. 递归分割迷宫生成算法生成迷宫不连通且存在缺口问题排查
优惠活动
大模型
产品
解决方案
定价
更多

递归分割迷宫生成算法生成迷宫不连通且存在缺口问题排查

递归分割迷宫生成问题修复方案

核心问题定位

  • 异步递归未等待执行:你声明的recursiveDivisionMaze是异步函数,但递归调用时未添加await关键字,会导致多层级的墙生成逻辑并发执行,pathCells全局状态冲突,墙绘制顺序错乱,是出现大量缺口的核心原因。
  • 子区域边界划分错误:你生成水平墙后,上方子区域的endRow设为drawAtRow - 1,生成垂直墙后左方子区域的endCol设为drawAtCol - 1,会导致下一轮递归生成的墙和当前墙相邻,出现无效缺口,且子区域宽高计算偏差导致连通性断裂。
  • 通道保护逻辑未启用:你注释掉了anyNeighborPathCell的判断条件,新生成的墙会直接堵住之前预留的通道,是迷宫不连通的主要原因。

具体修改点

  1. 异步递归添加等待逻辑:将所有递归调用recursiveDivisionMaze的代码前添加await关键字,保证上层墙绘制完成后再执行子区域的生成逻辑。
  2. 修正子区域边界参数:
// 水平墙的子区域划分修改为
// 上方区域
await recursiveDivisionMaze(
  matrix,
  startRow,
  startCol,
  drawAtRow - 2, // 原drawAtRow - 1改为-2,和墙保持1行间隔
  endCol,
  startNode,
  endNode,
  makeWall,
  pathCells
);
// 下方区域无需修改,保持drawAtRow + 2

// 垂直墙的子区域划分修改为
// 左方区域
await recursiveDivisionMaze(
  matrix,
  startRow,
  startCol,
  endRow,
  drawAtCol - 2, // 原drawAtCol - 1改为-2,和墙保持1列间隔
  startNode,
  endNode,
  makeWall,
  pathCells
);
// 右方区域无需修改,保持drawAtCol + 2
  1. 恢复通道保护逻辑:放开绘制墙判断条件中anyNeighborPathCell的注释,避免新墙覆盖已有的连通通道:
if (
  cell !== startNode &&
  cell !== endNode &&
  cell !== pathCell &&
  !anyNeighborPathCell(cell, pathCells, isHorizontal) // 取消该行注释
) {
  await makeWall(cell);
}
  1. 修正通道开口规则:限制每道墙的开口坐标和你步长为2的生成规则对齐,水平墙的开口列需取奇数,垂直墙的开口行需取奇数,保证开口可正常连通两侧子区域。

验证方法

修改完成后先测试10*10以内的小网格,暂时关闭makeWall的动画延迟,可快速验证生成的迷宫是否无多余缺口、全区域连通。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.14 14:15:02