递归函数的工作原理

问题描述 投票:0回答:1

亲爱的
预先感谢您。
我的问题是关于DFS算法。
我的代码和结果如下。

  1. 代码
graph = [
    [],
    [2,3,8],
    [1,7],
    [1,4,5],
    [3,5],
    [3,4],
    [7],
    [2,6,8],
    [1,7]
]
visited = [False]*9

def dfs(graph, v, visited):
  visited[v] = True
  #print(v, end='')
  for i in graph[v]:
    print("i:",i,"v:",v)
    if not visited[i]:
      print("no")
      dfs(graph,i,visited)
  1. 结果
i: 2 v: 1
no
i: 1 v: 2
i: 7 v: 2
no
i: 2 v: 7
i: 6 v: 7
no
i: 7 v: 6
i: 8 v: 7
no
i: 1 v: 8
i: 7 v: 8
i: 3 v: 1
no
i: 1 v: 3
i: 4 v: 3
no
i: 3 v: 4
i: 5 v: 4
no
i: 3 v: 5
i: 4 v: 5
i: 5 v: 3
i: 8 v: 1
  1. 我的问题
    我不明白“当所有连接的节点都被访问过时返回父节点的过程”。例如,节点 6 只有一个连接节点,即 7,既然我们已经探索了 7,那么它不是应该直接结束而不执行 'if notvisited[i]' 下的语句吗?我预计探索会在达到1-2-7-6(i:7 v:7)后结束,但结果与我的猜测不同。我不确定为什么显示下一个输出。
python stack depth-first-search
1个回答
0
投票

当您访问节点 6 并引导您到达已访问过的节点 7 时,对

dfs(graph, 6, visited)
的调用就会结束。然而,有一个叫做
dfs(graph, 6, visited)
的东西,它是先前调用
for
dfs(graph, 8, visited)
循环。现在 for 循环将继续检查下一个项目,依此类推...

© www.soinside.com 2019 - 2024. All rights reserved.