2016-07-20 1 views
-1

J'utilise le code python suivant pour trouver tous les chemins possibles entre deux noeuds, mais il retourne n'importe quoi, il attend juste de s'exécuter.Recherche de tous les chemins possibles entre deux noeuds dans un grand graphique

def find_all_paths(graph, start, end, path=[]): 
    path = path + [start] 
    if start == end: 
     return [] 
    if start not in graph: 
     return [] 
    paths = [] 

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

Mon graphique a environ 4K nœuds et 23K arêtes.

+0

Je suppose que vous voulez exclure les chemins en boucle, sinon il y a une infinité ... – Julien

+1

technique de débogage de base: exécuter votre code sur un exemple simple d'abord! Si cela fonctionne, augmentez progressivement la taille de votre problème. Si cela devient trop lent, alors travaillez à l'optimiser. – Julien

+0

est la fonction réellement récursive ou l'indentation est-elle mauvaise? –

Répondre

0

Une solution est en utilisant la programmation dynamique que je ne sais pas comment utiliser cette