for a in map: for b in map[a]: for c in map[b]: for d in map[c]: for e in map[d]: print a+b+c+d+e The above code is used to create all paths of certain length in a graph. map[a] represents the points you can reach from point a.How can I change it to simulate having an arbitrary number of loops?This is like a cartesian product (itertools.product) where at each iteration your choice for the next element is limited to those in map[current_point].
3 Réponses :
map = { 'a': ['b', 'c'], 'b': ['c', 'd'], 'c': ['d', 'a'], 'd': [] } def print_paths(map, start, length, prefix = ''): if length == 0: print prefix else: for a in map[start]: print_paths(map, a, length - 1, prefix + start) for a in map.keys(): print_paths(map, a, 5)
Je suis désolé d'avoir oublié de mentionner la carte [a] [b] est un entier qui représente la distance entre A à b. Donc, votre solution cesse de fonctionner dès qu'il frappe l'entier. Pouvez-vous me dire comment le changer à un équivalent exact de la boucle imbriquée? Donc, la fonction ne va pas au-delà de la carte [a]. (La carte [x] suffit pour tout point donné x depuis votre choix sur l'endroit où vous pouvez aller à côté d'un certain point ne dépend pas de la façon dont vous y êtes arrivé)
Si la carte [A] [B] est un entier, votre code d'origine ne peut pas fonctionner. Pourriez-vous mettre à jour la question avec un exemple de travail de carte code>? Je vais ajouter le type de
carte code> j'ai supposé à cette réponse.
... et éditer la réponse pour fonctionner réellement, car non I ni les 5 UPVOTERS ont remarqué que cela n'a pas ...
Ceci est un problème récursif classique. Votre fonction résultat: p> Ce code est un point de départ . Vous pouvez stocker tous les chemins dans une liste, utiliser aussi, jetez un oeil à Cordialement. P> P> générateur code> générateur, etc. N'oubliez pas d'empêcher les cercles. P>
Tout comme d'autres suggérons, avec récursion:
Eh bien, vous l'avez étiqueté avec récursion .. Avez-vous essayé cela?