Réaliser la liste chemins possibles

Bonjour à tous
Je ne parviens pas à réaliser une fonction en Python me donnant une liste des chemins possibles pour un arbre donné. Plus précisément, voici la forme de mon problème.

On considère qu'à chaque tour, on peut obtenir un nombre entier entre 1 et 6. Les résultats successifs obtenus au cours du jeu sont stockés dans la variable globale JEU. En fonction des résultats obtenus précédemment, il se peut que certaines valeurs ne soient pas accessibles lorsqu'on joue. À chaque tour, on peut utiliser la fonction COUPS POSSIBLES qui prend en entrée la variable JEU et renvoie les nombres que l'on peut obtenir à ce tour.

J'aimerais créer une fonction qui prendrait en entrée JEU et un entier naturel N non nul et renverrait une liste contenant toutes les listes possibles de N coups.
Dans le cas particulier de N=3, il me semble que l'on pourrait faire ainsi.
def ListeCoupsPossibles(JEU):
     chemin=[]
     C=COUPSPOSSIBLES(JEU)
     L0=JEU.copy()
     for c0 in C:
         L1=L0+[c0]
         C=COUPSPOSSIBLES(L1)
         for c1 in C :
              L2=L1+[c1]
              C=COUPSPOSSIBLES(L2)
              for c2 in C :
                   chemin=chemin+[[c0,c1,c2]]
     return chemin
Ici, j'ai imbriqué 3 boucles for mais je ne vois pas comment en imbriquer un nombre variable N, pourtant j'imagine qu'il s'agit d'un problème classique...
Merci d'avance de votre aide.

Réponses

  • Utilise un DFS (parcours en profondeur ou depth first search).
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
  • Deux mots clés pour chercher : "Parcours d'arbre non-binaire", "Fonction récursive".

    En gros, ça va ressembler à ça :
    Fonction Parcours ( Position_a_analyser, profondeur )
    si profondeur = 0 alors 
       // traitement.
    sinon
       pour i = 1 a 6 
           nouvelle_Position = f( Position_a_analyser, i )  //  On applique le mouvement i à la 
                         //Position actuelle, et ça donne une nouvelle position
           parcours ( nouvelle_position, profondeur -1 )    // Je suis dans la fonction Parcours,
                         // et j'appelle la fonction Parcours d'où le terme "Fonction récursive" pour la recherche 
       fin 
    fin
    
    Tu me dis, j'oublie. Tu m'enseignes, je me souviens. Tu m'impliques, j'apprends. Benjamin Franklin
  • J'imaginais bien qu'il y avait une solution puisque le problème me semblait classique mais j'ignorais tout du vocabulaire me permettant de faire ces recherches. Merci beaucoup de votre aide, je vais me renseigner de ce pas !
  • Ça peut se faire sans récursivité, en impératif.
    Algebraic symbols are used when you do not know what you are talking about.
            -- Schnoebelen, Philippe
Connectez-vous ou Inscrivez-vous pour répondre.