【发布时间】:2017-09-05 07:46:23
【问题描述】:
我正在学习算法并且正在做这个problem,它正在寻找区域的数量。我尝试了使用 python 的深度优先搜索方法,但我收到了超出调用堆栈的错误。谁能告诉我实施中的缺陷是什么以及如何克服它?代码是:
def findCircleNum(A):
count = 0
def dfs(row, column):
if row < 0 or column >= len(A[0]) or row >= len(A) or column < 0:
return
if A[row][column] == 0:
return
A[row][column] = 0
for i in range(row-1, row+2):
if i >= 0 and i<len(A) and A[i][column] == 1:
dfs(i, column)
for i in range(column-1, column+2):
if i >= 0 and i<len(A[0]) and A[row][i] == 1:
dfs(row, i)
for row in range(len(A)):
for column in range(len(A[0])):
if A[row][column] == 1:
dfs(row, column)
count += 1
return count
findCircleNum(m)
失败的输入是一个全 1 的 100x100 矩阵
错误是get是:
RuntimeError: maximum recursion depth exceeded
谢谢!
【问题讨论】:
-
这不是 DFS... 提示:您的 DFS 函数不会返回任何内容。
-
我正在更改矩阵。它适用于较小的输入。你能告诉我我要去哪里吗?
-
更改矩阵如何帮助您找到连通分量的数量?
-
如果单元格为 1,我将其设为 0,然后对其邻居进行 DFS。更改它可确保不再遇到相同的单元格。希望这是有道理的。
-
对不起,我应该说独立组件而不是连接组件。它找到矩阵中的区域数。在第一次 dfs 调用完全完成后,所有直接连接的 1 都将变为 0,这使得这一个组件在我增加计数时。这个链接有完整的问题陈述leetcode.com/problems/friend-circles
标签: python algorithm depth-first-search