为什么看起来缺少一些回叫(DFS),这为什么起作用?

问题描述 投票:0回答:1
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不会传递回去。不是这样吗?如果不是,为什么会这样呢?

depth-first-search
1个回答
0
投票

已解决。原来我走在正确的轨道上。

我需要更改

for c in graph[s]:
  dfs_helper(c,d)

to

for c in graph[s]:
  if dfs_helper(c,d): return True
© www.soinside.com 2019 - 2024. All rights reserved.