【发布时间】:2020-05-11 14:14:12
【问题描述】:
我对 Python 编码很陌生,很难理解下面的代码。它是基于图论的,使用 DFS 在所有岛屿区域中找到最大的区域。 1 代表岛屿,0 代表网格中的水。
def maxAreaOfIsland(grid):
row, col = len(grid), len(grid[0])
def dfs(i, j):
if 0 <= i <= row - 1 and 0 <= j <= col - 1 and grid[i][j]:
grid[i][j] = 0
#scans through all rows & cols and
#turns number in the grid into 0 if all conditions are true?
return 1 + dfs(i - 1, j) + dfs(i + 1, j) + dfs(i, j - 1) + dfs(i, j + 1)
return 0
# recursive function that checks up, down, left, right in the grid.
# when does it return 1?
return max(dfs(i, j) for i in range(row) for j in range(col))
maxAreaOfIsland([[1,0,1,1,1],
[0,0,0,1,1],
[1,1,1,0,1]])
Out: 6
我已经包含了 cmets,这反映了我到目前为止的理解,但不确定它是否正确。从第 4 行开始,我很困惑,尤其是递归部分。 有人可以详细解释一下吗? 通常这类代码往往有一个队列/出队来记录该岛是否被访问过,但我认为这个代码没有?
【问题讨论】:
标签: python graph depth-first-search