2010-11-18 11 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