python - 此 python 代码是否使用深度优先搜索 (DFS) 来查找所有路径?

标签 python graph-theory depth-first-search

此代码在 python official essays on graph theory 中给出.这是代码:

def find_all_paths(graph, start, end, path=[]):
        path = path + [start]
        if start == end:
            return [path]
        if not graph.has_key(start):
            return []
        paths = []
        for node in graph[start]:
            if node not in path:
                newpaths = find_all_paths(graph, node, end, path)
                for newpath in newpaths:
                    paths.append(newpath)
        return paths

我不擅长 python,因为我还没有足够的练习和阅读。您能否通过将此与 DFS 图中的子兄弟概念相关联来解释代码?谢谢。

最佳答案

看它是DFS的关键是递归发生在路径累积之前。换句话说,在将任何内容放入“路径”列表之前,递归将进行到它需要进行的深度。在返回列表之前,所有最深的 sibling 都在“路径”上累积。

我相信代码使用“附加”而不是“扩展”是正确的,因为“路径”是所有路径的累加器。虽然它可能被写成

paths += find_all_paths(graph, node, end, path)

(编辑)...而不是

 newpaths = find_all_paths(graph, node, end, path)
 for newpath in newpaths:
     paths.append(newpath)

关于python - 此 python 代码是否使用深度优先搜索 (DFS) 来查找所有路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4230878/

相关文章:

python - 跟进术语,寻找行动项目

算法方法 - 在网格中找到最佳路径

c - 将图分成三部分,使三部分权重之和的最大值最小化

java - 打印任何退出路径,从任意点到外部网格?

python - 在python中设置搜索程序的目录

python - Keras 逻辑回归在第一个纪元返回 nan

python - 如何在 pygame 中使图 block map 滚动?

algorithm - 圆图公共(public)内部节点,NP

algorithm - 邻接表中的大 O - 删除顶点并删除边缘(对图执行各种操作的时间复杂度成本)