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

CodeUp 6098递归路径标记问题:代码逻辑错误求助

CodeUp 6098题路径标记问题修复求助

题目规则

  • 起点为坐标(1,1)
  • 仅能向值为0的格子移动,优先向右(坐标变化:(x, y+1)),其次向下(坐标变化:(x+1, y))
  • 遇到值为2的格子或无法移动时停止,走过的路径标记为9

问题说明

我在实现时,代码输出结果不符合预期:所有0都被改为9,而不是仅标记正确路径。调试发现(6,6)处的break未生效,向下移动的判断分支未正常工作,代码未按预期停止。

初始网格

1 1 1 1 1 1 1 1 1 1
1 0 0 1 0 0 0 0 0 1
1 0 0 1 1 1 0 0 0 1
1 0 0 0 0 0 0 1 0 1
1 0 0 0 0 0 0 1 0 1
1 0 0 0 0 1 0 1 0 1
1 0 0 0 0 1 2 1 0 1
1 0 0 0 0 1 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1

期望输出

1 1 1 1 1 1 1 1 1 1
1 9 9 1 0 0 0 0 0 1
1 0 9 1 1 1 0 0 0 1
1 0 9 9 9 9 9 1 0 1
1 0 0 0 0 0 9 1 0 1
1 0 0 0 0 1 9 1 0 1
1 0 0 0 0 1 9 1 0 1
1 0 0 0 0 1 0 0 0 1
1 0 0 0 0 0 0 0 0 1
1 1 1 1 1 1 1 1 1 1

错误输出

1 1 1 1 1 1 1 1 1 1
1 9 9 1 9 9 9 9 9 1
1 0 9 1 1 1 9 9 9 1
1 9 9 9 9 9 9 1 9 1
1 9 9 9 9 9 9 1 9 1
1 9 9 9 9 1 9 1 9 1
1 9 9 9 9 1 9 1 9 1
1 9 9 9 9 1 9 9 9 1
1 9 9 9 9 9 9 9 9 1
1 1 1 1 1 1 1 1 1 1

我的代码

grid = []
for i in range(10):
  grid.append([])
  for j in range(10):
    grid[i].append(0)

for i in range(10):
  grid[i] = list(map(int, input().split()))

p_x, p_y = (1,1)
grid[p_x][p_y] = 9

def move(p_x, p_y):
  for x in range(p_x,9):
    for y in range(p_y,9):
      print(x,y)

      if grid[x][y + 1] == 0:
        grid[x][y + 1] = 9
        move(x, y + 1)
      elif grid[x][y + 1] == 2:
        grid[x][y + 1] = 9
        break
      elif grid[x + 1][y] == 0:
        grid[x + 1][y] = 9
        move(x + 1, y)
      elif grid[x + 1][y] == 2:
        grid[x + 1][y] = 9
        break
      else:
        break
  
move(p_x, p_y)

问题分析与修复

原代码的核心错误是使用了嵌套for循环+递归的组合:for循环会遍历所有后续的x、y坐标,递归又会重复触发循环,导致所有0都被标记为9;同时break只能跳出当前的内层循环,无法终止整个移动流程。

正确的思路是单步移动循环:从当前位置出发,每次只判断向右/向下的可行性,移动到下一个位置后继续判断,直到触发停止条件。

修复后的代码:

# 初始化网格
grid = []
for _ in range(10):
    row = list(map(int, input().split()))
    grid.append(row)

# 起点坐标
x, y = 1, 1
grid[x][y] = 9

while True:
    # 优先判断向右移动
    if grid[x][y+1] == 0:
        y += 1
        grid[x][y] = 9
    elif grid[x][y+1] == 2:
        # 遇到终点,标记后停止
        y += 1
        grid[x][y] = 9
        break
    # 向右不可行,判断向下移动
    elif grid[x+1][y] == 0:
        x += 1
        grid[x][y] = 9
    elif grid[x+1][y] == 2:
        x += 1
        grid[x][y] = 9
        break
    # 无法移动,停止
    else:
        break

# 打印结果
for row in grid:
    print(' '.join(map(str, row)))

修复说明

  1. 去掉冗余的初始化代码,直接读取输入构建网格
  2. 使用while True循环实现单步移动,每次只处理当前位置的下一个方向
  3. 每移动一次就更新当前坐标,直到遇到2或无法移动时终止循环
  4. 最后统一打印网格结果

内容的提问来源于stack exchange,提问作者유한정

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 17:46:02