首页 > 解决方案 > Python 遍历 2dDarray

问题描述

我有一个二维数组

    grid = [[1, 0, 0, 0, 0], 
            [0, 0, 0, 0, 0], 
            [0, 0, 0, 0, 0]]

现在基于存在的点1,我想创建一个新数组并保存到它的所有点的距离。例子

dp = [[1, 2, 3, 4, 5], 
      [2, 3, 4, 5, 6], 
      [3, 4, 5, 6, 7]]

RuntimeError: maximum recursion depth exceeded 不确定我错过了什么。

def minTotalDistance(grid):
    dp = [[0]*len(grid[0]) for _ in range(len(grid))]

    for i in range(len(grid)):
        for j in range(len(grid[0])):
            if grid[i][j] == 1:
                dfs(i, j, dp, 1)
                
    print dp 
    
def dfs(i, j, dp, val): 
    if i < 0 or i >= len(dp) or j < 0 or j >= len(dp[0]):
        return 0 
    dp[i][j] = val
    dfs(i - 1, j, dp, val+1)
    dfs(i + 1, j, dp, val+1)
    dfs(i, j - 1, dp, val+1)
    dfs(i, j + 1, dp, val+1)
    

grid = [[1, 0, 0, 0, 1], [0, 0, 0, 0, 0], [0, 0, 1, 0, 0]]
minTotalDistance(grid)

标签: pythonpython-2.7matrixmultidimensional-array

解决方案


我认为这里的问题在于您的递归调用。例如,当您调用dfs(0, 0, dp, val)will call dfs(0-1, 0, dp, val)which return 但随后它将调用dfs(1, 0, dp, val)which then calls时dfs(1 - 1, 0, dp, val)。这里 dp 和 val 与递归无关,因为它们不会以任何方式终止函数。请注意,就 i 和 j 而言,最后一次调用等同于第一次调用,它们只是重复循环,直到调用堆栈超出内存边界并出现错误。


推荐阅读