递归实现最小成本路径(MCP)结果异常,求代码错误排查
问题原因分析
你的代码核心错误是非法路径的边界返回值设置错误:
你把「列越界的非法不可走路径」和「已经走完所有行的有效结束路径」都统一返回0,相当于给不可走的路径赋予了0的极小成本,递归选最小值的时候会优先选这些根本不存在的非法路径,最终得到不符合要求的结果。
比如你得到的3,实际就是递归过程中选到了越界路径:2(A[0][1]) + 1(A[1][0]) + 0(c=-1越界返回值)= 3,这明显不是合法路径。
修复方案
- 拆分边界判断逻辑:
- 当
n >= max_n:已经遍历完所有行,属于路径正常结束,返回0 - 当
c < 0或c >= max_c:列越界,属于无效路径,返回无穷大float('inf')排除该路径
- 当
- 调用时传入起始坐标
n=0、c=1即可得到正确结果。
修复后完整代码
def minSumRekursive_helper(A, n ,c): max_n = len(A) max_c = len(A[0]) # 路径正常结束:已经走完所有行 if n >= max_n: return 0 # 路径非法:列越界 if c < 0 or c >= max_c: return float('inf') minSum = min( minSumRekursive_helper(A, n+1, c-1), minSumRekursive_helper(A, n+1, c+1), minSumRekursive_helper(A, n+1, c) ) total = A[n][c] + minSum return total # 测试调用 A = [[6,2,4,1], [1,2,5,4], [2,7,3,2], [1,2,2,5], [9,5,1,6]] print(minSumRekursive_helper(A, 0, 1)) # 输出7,符合预期
内容的提问来源于stack exchange,提问作者hatahetahmad
相关产品推荐
相关产品推荐

