def dfs(s,d):
def dfs_helper(s,d):
if s==d:
return True
if s in visited:
return False
visited.add(s)
for c in graph[s]:
dfs_helper(c,d)
return False
visited = set()
return dfs_helper(s,d)
我不确定上面的代码为什么正确。我在论文中看到了这一点,但是在遍历所有邻居时不应该说return dfs_helper(c,d)
而不是dfs_helper(c,d)
吗?否则,由于我认为返回只会使您直接向上一级调用,因此我们如何一路返回所有内容。
即如果我们有一个具有边(A,B),(A,C)和(C,D)的图,我就知道dfs_helper(D,D)
返回True的原因,但是当我们运行dfs_helper(C,D)
时,我们只是运行dfs_helper(D,D)
但是我们不会返回dfs_helper(D,D)
,因此True不会传递回去。不是这样吗?如果不是,为什么会这样呢?
已解决。原来我走在正确的轨道上。
我需要更改
for c in graph[s]:
dfs_helper(c,d)
to
for c in graph[s]:
if dfs_helper(c,d): return True