Bonjour,
Je suis debutante en C et je dois realiser un puzzle en utilisant un tableau 3*3.
Pour cele l'algorithme est le suivant:
Un puzzle 3x3 se présente comme suit:
abc
def
gh
Une case est toujours vide afin de pouvoir y déplacer, au choix, l'une des
cases adjacentes dont elle prend la place. Ainsi, les deux opérations
réalisables sur l'exemple ci-dessus sont:
abc
de
ghf
abc
def
g h
L'objectif de la résolution du puzzle est de passer d'un état initial connu à
un état final choisi.
abc ? abc
def ---> d e
gh fgh
Pour ce faire, on évalue à chaque étape "l'erreur" vis-à-vis de l'état final en
sommant, sur chaque case, la distance par rapport à sa position dans l'état
final. La distance entre deux cases se calcule en additionnant le nombre de
colonnes et de lignes qui les séparent. Dans l'exemple ci-dessus, on a :
erreur(e) = 1
erreur(f) = 3
erreur(g) = 1
erreur(h) = 1
-------------
erreur 6
Donc, pour résoudre le puzzle, il suffit de choisir, à chaque étape, le
déplacement parmi les 2, 3 ou 4 possibles (selon la position de la case vide)
qui minimise cette erreur. Bien sûr, lorsque l'erreur est nulle, la solution
est atteinte.
La solution n'est pas toujours trouvable par cette méthode (c'est le cas de
l'exemple ci-dessus). Pour éviter une boucle infinie, il faut fixer un nombre
maximum d'itérations de l'algorithme.
Interface:
Le programme doit pouvoir s'appeller en ligne de commande, avec comme arguments
le puzzle de départ et le puzzle d'arrivée, mis sous forme d'une chaîne de 9
caractères entre guillemets (en concaténant les lignes de la matrice).
Le programme affiche les déplacements réalisés sous la forme d'une suite de
symboles représentant le parcours de la case vide. Par exemple "hbgd" pour
"haut-bas-gauche-droite", ou encore "^v<>".
Exemple:
$ MC []MON_PROGRAMME.EXE " 23185746" "1238 4765"
Solution: v>v>^<
Le truc c'est que je ne comprends pas vrt comment on calcule l'erreur et par ou commencer...Pourriez vous m'aider svp en ces temps difficiles d'examens..?
Merci d'avance!
Partager