Cela décrit le classique « puzzle 15 » (ou une variante plus grande). Je ne peux pas proposer de solution unique car la solution dépend entièrement de la disposition initiale des 30 nombres. Pour résoudre ce problème, vous devrez utiliser un algorithme de recherche (comme A*, recherche en largeur d'abord ou recherche en profondeur d'abord) pour trouver la séquence optimale d'échanges. Ces algorithmes nécessitent beaucoup de calculs pour des puzzles de cette taille.
Il n'y a pas de raccourcis ; vous devez systématiquement déplacer les nombres vers leurs positions correctes. Il existe également des arrangements insolubles, selon la parité des permutations.
Voici ce qu'un programme résolvant ce problème devrait faire :
-
Représentez le puzzle : Créez une structure de données (probablement un tableau 2D ou un tableau 1D) pour contenir les 30 nombres.
-
Définir l'état objectif : Une structure de données représentant les nombres correctement ordonnés (1, 2, 3...30).
-
Implémenter un algorithme de recherche : Choisissez un algorithme approprié (A* est souvent préféré pour son efficacité) pour explorer les séquences d'échange possibles. L'algorithme doit garder une trace des états visités pour éviter les cycles.
-
*Fonction heuristique (pour A) :* Si vous utilisez A, vous avez besoin d'une fonction heuristique pour estimer la distance entre un état donné et l'état objectif. Une heuristique courante pour le puzzle 15 (et adaptable à cette version plus grande) est la distance de Manhattan (la somme des distances entre chaque tuile et sa position d'objectif).
-
Fonction d'échange : Une fonction pour échanger deux nombres dans la représentation du puzzle.
-
Condition de fin : L'algorithme s'arrête lorsqu'il trouve l'état objectif.
Il s'agit d'une tâche de programmation complexe, bien au-delà d'une simple réponse. Vous devrez utiliser un langage de programmation comme Python, C ou Java pour implémenter cela. Des bibliothèques existent pour faciliter les algorithmes de recherche, mais la logique de base doit être écrite.