2010-11-18 27 views
2

Le code est de déterminer un chemin entre deux nœuds pour les graphes orientés. This est le code:Une question de code dans la théorie des graphes de python essais

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 

Étant nouveau python, je deux ont des questions petites et insignifiantes. J'espère que cela ne vous dérange pas.

Q1. Que signifie if newpath: dans la deuxième dernière ligne du code?

Q2. Est-ce que ce code donne chemins possibles dans le graphe orienté?

Merci.

Répondre

3

Q1: Vérifie si l'appel de find_path renvoie effectivement quelque chose. Voir les documents de langue pour savoir ce qui est interprété comme vrai et ce qui est faux si le type du terme n'est pas booléen pour commencer. (Dans ce cas, None est faux).

Q2: Non: cette fonction donne exactement un chemin du début à la fin.

+0

Merci user507787. Pouvez-vous dire quel chemin serait-ce? Serait-ce le chemin possible à partir de la première valeur de la clé rencontrée? – Pupil

+0

Renseignez-vous sur Depth-First-Search et Breadth-First-Search sur Wikipedia. L'algorithme implémenté par le code ci-dessus est DFS, ce qui signifie que si on vous donne un ordre de traversée des arêtes à chaque nœud, il trouvera le chemin avec une séquence associée (m0, m1, m2, ...) où nous choisirons le mo-th edge au début, etc. d'une manière telle que la séquence soit la plus petite possible dans l'ordre lexicographique. – user507787

+0

D'accord. Merci :) – Pupil