python代码中的一个问题';s的图论论文

python代码中的一个问题';s的图论论文,python,if-statement,graph-theory,delimiter,Python,If Statement,Graph Theory,Delimiter,代码用于确定有向图的两个节点之间的路径。代码是: def find_path(graph, start, end, path=[]): path = path + [start] if start == end: return path if not graph.has_key(start): return None for node in graph[start]:

代码用于确定有向图的两个节点之间的路径。代码是:

def find_path(graph, start, end, path=[]):
        path = path + [start]
        if start == end:
            return path
        if not graph.has_key(start):
            return None
        for node in graph[start]:
            if node not in path:
                newpath = find_path(graph, node, end, path)
                if newpath: return newpath
        return None
作为python新手,我有两个小问题。我希望你不介意

问题1。如果代码最后一行的newpath:是什么意思

问题2。此代码是否提供有向图中的所有可能路径


谢谢。

Q1:这检查find\u path调用是否实际返回了一些内容。请参阅语言文档,了解如果术语的类型一开始不是布尔型的,哪些解释为true,哪些解释为false。(在本例中,None的计算结果为false)


问题2:否:此函数从开始到结束只提供一条路径。

谢谢用户507787。你能告诉我那是哪条路吗?这是从第一次遇到的密钥值开始的可能路径吗?请阅读Wikipedia上的深度优先搜索和广度优先搜索。上面代码实现的算法是DFS,这意味着如果给每个节点的边遍历排序,它将找到具有关联序列(m0、m1、m2,…)的路径在这里,我们在开始等处选择第m个边,使序列在字典顺序下最小。user507787:如果您看到了python文章页面的链接,那么我想问,这里给出的查找所有可能路径的代码是否也使用DFS实现?谢谢,是的。试着想象一下程序正在做什么:如果它到达一个节点x并签出一个邻居x*,它会走得更深,即签出x*的邻居。只有在处理完所有这些问题后,它才会返回并查看x的其他邻居。这就是DFS的含义。对于BFS,在进入另一个级别“下降”之前,您将首先查看x的所有邻居。如果需要练习,请尝试修改find_path例程以实现BFS。