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

在递归DFS函数中更新追踪矩阵时为何出现IndexError?

问题分析与修复

核心问题原因

你遇到的IndexError和多行意外更新的问题,根源完全在于**visited_matrix的初始化方式错误**:

  • 代码[[False] * 3] * 3并没有创建3个独立的子列表,而是生成了1个[False, False, False]列表,然后将这个列表的引用重复添加3次到外层列表中。
  • 这意味着:当你执行visited[row][col] = True时,所有行的第col列都会被同步修改——因为它们指向同一个底层列表。
  • 虽然你的边界检查逻辑本身正确,但这种错误的引用结构会破坏DFS的访问标记逻辑,导致递归过程中出现意外的越界访问(比如某些本应被拦截的无效索引未被正确处理),最终触发IndexError。

修复方案

需要创建3个独立的子列表来初始化visited_matrix,以下是两种可靠的方式:

方式1:列表推导式(推荐)

visited_matrix = [[False for _ in range(3)] for _ in range(3)]

方式2:逐行手动创建

visited_matrix = []
for _ in range(3):
    visited_matrix.append([False] * 3)

两种方式都会确保每个子列表是独立的对象,修改某一行的元素不会影响其他行。

验证修复效果

修改初始化代码后,运行你的DFS函数,会正常输出:

Visited: 0, 0
Visited: 0, 1
Visited: 0, 2

不再出现索引错误,也不会有多行被意外更新的异常行为。

通用优化建议

为了让代码适配任意尺寸的网格,不要硬编码3x3的尺寸,而是根据输入矩阵动态生成visited_matrix:

# 基于输入矩阵的行列数动态初始化
visited_matrix = [[False] * len(sample_matrix[0]) for _ in range(len(sample_matrix))]

内容的提问来源于stack exchange,提问作者15 詹詠翔

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 04:21:50