如何修改Python代码实现n×n网格按规则移动的路径计数功能
原代码存在的问题
- 开头强行把传入的x、y坐标赋值为
given_map[0][0],每次进入函数都会重置坐标,完全丢失了当前位置参数,递归逻辑从根上就不成立 - 终止条件判断错误:n×n矩阵的终点坐标是
len(given_map)-1,不是len(given_map),后者已经属于越界范围 - 完全没实现移动规则:既没有按当前单元格数值计算步长,也没有区分向右、向下两个移动方向,所有递归分支都直接传入原x、y参数,会直接触发死循环
- 没有累加两个移动方向的路径数,完全不具备路径统计能力
修复后的实现
def path(given_map, x, y): n = len(given_map) # 越界直接返回0,不计入有效路径 if x >= n or y >= n: return 0 # 到达终点返回1,计数+1 if x == n - 1 and y == n - 1: return 1 step = given_map[x][y] # 非终点位置步长为0的话无法移动,直接返回0 if step == 0: return 0 # 累加向右、向下两个方向的路径总数 return path(given_map, x + step, y) + path(given_map, x, y + step) if __name__ == '__main__': input_map = [[1,2,9,4,9], [1,5,8,7,9], [9,3,9,9,2], [2,3,7,5,9], [1,9,9,1,0]] print(path(input_map, 0, 0)) input_map = [[1,1,2], [1,2,2], [1,2,0]] print(path(input_map, 0, 0))
运行输出
2 2
内容的提问来源于stack exchange,提问作者user17315266
相关产品推荐
相关产品推荐

