C语言程序迁移至Python3后运行结果异常的问题求助
问题根因
你代码的核心差异是break的作用范围不匹配:
- C版本中
switch分支内的break仅跳出switch结构,外层while循环会继续执行,会沿着格子指示的方向持续遍历,直到出界或者碰到当前z标记过的格子 - Python版本中每个方向判断分支末尾的
break会直接跳出外层while循环,导致每个起点仅执行一步就终止遍历,和原逻辑完全不符
修正方案
删除Python代码中每个方向分支末尾的break,同时可以删掉冗余的elif判断(因为b[i1][j1]==z的分支已经提前break,后续逻辑默认是b[i1][j1]!=z的情况),修正后的核心逻辑如下:
i1=0 j1=0 counter=0 flag=True z=0 for i in range(n): for j in range(m): i1=i j1=j z+=1 while i1>=0 and i1<n and j1>=0 and j1<m and flag: if a[i1][j1] == 'D': if b[i1][j1] == z: flag = False break b[i1][j1] = z i1 += 1 elif a[i1][j1] == 'U': if b[i1][j1] == z: flag = False break b[i1][j1] = z i1 -= 1 elif a[i1][j1] == 'L': if b[i1][j1] == z: flag = False break b[i1][j1] = z j1 -= 1 elif a[i1][j1] == 'R': if b[i1][j1] == z: flag = False break b[i1][j1] = z j1 += 1 if not flag: counter += 1 flag = True
修正后逻辑和C版本完全一致,运行结果会匹配。
内容的提问来源于stack exchange,提问作者FoolingAround
相关产品推荐
相关产品推荐

