2010-11-18 10 views
2

该代码是为有向图确定两个节点之间的路径。 This是代码:来自python的图论论文代码中的问题

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,我两者有小而琐碎的问题。我希望你不介意。

Q1。代码的第二行最后一行代表if newpath:是什么意思? Q2302。此代码是否在有向图中给出全部可能的路径?

谢谢。

回答

3

Q1:这会检查find_path的调用是否实际返回某些内容。查看语言文档以找出什么被解释为真,如果该术语的类型不是以布尔值开始,那么它是假的。 (在这种情况下,None评估为false)。

Q2:否:此功能从开始到结束只有一条路径。

+0

感谢user507787。你能说出那条路吗?这将是从钥匙的第一次遇到的价值可能的路径? – Pupil 2010-11-18 02:06:06

+0

请阅读维基百科上的深度优先搜索和广度优先搜索。上面的代码实现的算法是DFS,这意味着如果给出每个节点边缘遍历的顺序,它将找到具有相关序列(m0,m1,m2,...)的路径,我们在这里选择开始时的边缘等等,以便在字典顺序下该序列是最小的。 – user507787 2010-11-18 02:15:02

+0

好的。谢谢:) – Pupil 2010-11-18 02:17:33