25-NSIJ2G11-3
-
Le chemin 3 → 9 → 1 → 2 → 4 → 8 est non prolongeable.
-
Lors de l'appel
creer_jeu(9)
, la variablevaleur
prendra successivement les valeurs de 1 à 9 (inclus). -
Une fois le code exécuté, l'expression
jeu_9[0].valeur
renvoie1
. -
La condition
s != self
évite qu'un sommet soit relié à lui-même et la conditionself.valeur % s.valeur == 0
vérifie que le sommets
est un diviseur du sommetself
, ou de manière équivalente queself
est un multiple des
. -
Après exécution de
jeu_9[5].relier_diviseurs(jeu)
, la listejeu_9[5].diviseurs
contient 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.