25-NSIJ2G11-3
-
Le chemin 3 → 9 → 1 → 2 → 4 → 8 est non prolongeable.
-
Lors de l'appel
creer_jeu(9), la variablevaleurprendra successivement les valeurs de 1 à 9 (inclus). -
Une fois le code exécuté, l'expression
jeu_9[0].valeurrenvoie1. -
La condition
s != selfévite qu'un sommet soit relié à lui-même et la conditionself.valeur % s.valeur == 0vérifie que le sommetsest un diviseur du sommetself, ou de manière équivalente queselfest un multiple des. -
Après exécution de
jeu_9[5].relier_diviseurs(jeu), la listejeu_9[5].diviseurscontient les sommets dont la valeur divise 6, plus précisement[jeu_9[0], jeu_9[1], jeu_9[2]]. -
La ligne manquante est
sommet.relier_diviseur(jeu). -
La ligne
assert not self.est_vide()lève une erreur si l'on tente de défiler une file vide. -
def rechercher_chemins(jeu): chemins_np = [] f = File() for sommet in jeu : f.enfiler([sommet]) while not f.est_vide(): chemin = f.defiler() dernier = chemin[-1] voisins = dernier.diviseurs + dernier.multiples prolongeable = False for voisin in voisins: if voisin not in chemin: prolongeable = True f.enfiler(chemin + [voisin]) if not prolongeable: chemins_np.append(chemin) return chemins_np -
Les premiers essais montrent que le nombre de chemins non prolongeables croît très rapidement avec le nombre de sommets. Le nombre de chemins considérés semble suivre une croissance exponentielle, voire factorielle. L'algorithme devient vite inefficace, et il faudra envisager une stratégie plus efficace que cette simple recherche exhaustive pour aborder un grand nombre de sommets.