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

二维矩阵索引越界问题调试:风机选址场景代码修正

问题与代码修正

问题场景

给定4×3矩阵,K=1,鸟类栖息地(值为1的单元格)位于(0, 0)、(2, 2)和(3, 1)。需统计可建造风力涡轮机的位置(值为0且不在栖息地K范围内的单元格),预期输出3。当前代码存在索引越界等错误,无法得到正确结果。

原错误代码

def solution(Matrix, K):
 row=len(Matrix)
 col=len(Matrix[0])
 K = K +1
 
 for i in (row):
   for j in (col):
    if Matrix[i][j] == 1:
       print(Matrix)
       fun(Matrix,i,j, K),

 res = 0,
 for i in (row):
   for j in (col):
    if Matrix[i][j] == 0:
      res += 1,
    return res,
 

def fun(Matrix,i,j,k):
  if k == 1:
   if i-1 >= 0:
      if Matrix[i-1][j]==0 or Matrix[i-1][j] >=2 and Matrix[i-1][j] <= k-1:
       Matrix[i-1][j]=k,
       fun(Matrix,i-1,j,k-1),
   if i+1 < len(Matrix):
      if Matrix[i+1][j] == 0  or Matrix[i+1][j] >=2 and Matrix[i+1][j] <= k-1:
       Matrix[i+1][j]=k,
       fun(Matrix,i+1,j,k-1)
   if j-1 >= 0:
     if Matrix[i][j-1]== 0 or Matrix[i][j+1] >= 2 and Matrix[i][j-1] <= k-1:
      Matrix[i][j-1]=k,
      fun(Matrix,i,j-1,k-1)
   if j+1 < len(Matrix[0]):
     if Matrix[i][j+1]== 0 or Matrix[i][j-1] >=2  and Matrix[i][j+1] <= k-1:
      Matrix[i][j+1]=k,
      fun(Matrix,i,j+1,k-1),
  return

错误分析与修正方案

  1. 循环遍历错误:for i in (row) 写法错误,应改为for i in range(row),同理列遍历改为for j in range(col),否则会直接使用row/col的数值作为迭代对象,导致索引越界。
  2. 多余逗号问题:代码中多处添加了不必要的逗号(如res = 0,、fun(...)后的逗号),这会将变量转为元组,导致后续逻辑出错,需全部删除。
  3. 递归条件错误:原fun函数仅在k == 1时执行标记,不符合K范围标记逻辑,应改为判断k <= 1时终止递归,剩余情况执行标记操作。
  4. 索引引用错误:fun函数中j-1分支错误引用Matrix[i][j+1],j+1分支错误引用Matrix[i][j-1],需修正为对应单元格的索引。
  5. 标记条件逻辑错误:原条件中Matrix[...] <= k-1无意义(k-1为0),应简化为仅标记未被标记的0单元格,避免重复标记。
  6. return位置错误:原代码中return res放在内层循环内,导致第一次循环就返回结果,需移到外层循环结束后。

修改后的正确代码

def solution(Matrix, K):
    row = len(Matrix)
    col = len(Matrix[0])
    max_distance = K + 1  # 用更清晰的变量名
    
    # 遍历所有鸟类栖息地,标记其K范围内的单元格
    for i in range(row):
        for j in range(col):
            if Matrix[i][j] == 1:
                fun(Matrix, i, j, max_distance)
    
    # 统计未被标记的0单元格数量
    res = 0
    for i in range(row):
        for j in range(col):
            if Matrix[i][j] == 0:
                res += 1
    return res

def fun(Matrix, i, j, k):
    if k <= 1:
        return  # 递归终止条件:距离用尽
    
    # 标记上方单元格
    if i - 1 >= 0 and Matrix[i-1][j] == 0:
        Matrix[i-1][j] = k
        fun(Matrix, i-1, j, k-1)
    # 标记下方单元格
    if i + 1 < len(Matrix) and Matrix[i+1][j] == 0:
        Matrix[i+1][j] = k
        fun(Matrix, i+1, j, k-1)
    # 标记左方单元格
    if j - 1 >= 0 and Matrix[i][j-1] == 0:
        Matrix[i][j-1] = k
        fun(Matrix, i, j-1, k-1)
    # 标记右方单元格
    if j + 1 < len(Matrix[0]) and Matrix[i][j+1] == 0:
        Matrix[i][j+1] = k
        fun(Matrix, i, j+1, k-1)

测试验证

使用题目给定的矩阵:

matrix = [
    [1, 0, 0],
    [0, 0, 0],
    [0, 0, 1],
    [0, 1, 0]
]
print(solution(matrix, 1))  # 输出3,符合预期

内容的提问来源于stack exchange,提问作者HASEEB UR REHMAN

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:37:44