为什么不在使用集合跟踪访问的顶点(学生)的同时执行标准DFS?问题陈述中说,矩阵的最大大小是200x200,因此假设递归限制为1000,则不必担心递归限制。使用集合进行跟踪也会使代码更简单:
def findCircleNum(A):
count = 0
visited = set()
def dfs(student):
if student in visited:
return
visited.add(student)
for i, friend in enumerate(A[student]):
if friend:
dfs(i)
for student in range(len(A)):
# Note we want to track circles, student without any friend won't count
if student not in visited and any(A[student]):
dfs(student)
count += 1
return count
编辑
有问题的代码看起来像是在执行DFS时将边视为顶点。这也可以解释递归深度的问题,因为100个顶点的无向图具有循环,但没有多条边,具有最大(100×101)/2=5050条边。