Précédent Remonter Suivant

8.2  Taquinons les files

Dans cette section, nous souhaitons construire un programme permettant par une recherche exhaustive de résoudre le problème du taquin. Pour ce faire, nous allons utiliser la notion de file.

8.2.1  Implantation d'une file gardée

Une cellule est composée d'une structure state de type position_t (qui sera décrit dans la section 8.2.2) et d'un pointeur nommé next sur une autre cellule.

Une file gardée est constituée de 2 pointeurs ; le premier de ces pointeurs a pour identificateur tail et pointe sur une cellule qualifiée de queue de file. Le second a pour identificateur head et pointe sur une cellule qualifiée de tête de file. Une file est vide lorsque les pointeurs tail et head pointent sur NULL.
Fonctions de manipulation de la file.
La file peut être manipulée grâce aux fonctions suivantes dont on donne le prototype :
Questions.
  1. Donnez la déclaration des types cellule_t et file_t décrits ci-dessus.
  2. Donnez les définitions des fonctions décrites ci-dessus.

8.2.2  Jeu de taquin

Un jeu de taquin est constitué d'une grille de 9 cases contenant des jetons i.e. les entiers de 0 à 8 :
3 7 4
0 1 8
2 5 6
L'entier 0 correspond à une case vide qui peut être déplacée en l'échangeant avec une case voisine. Ainsi, en déplaçant la case vide vers la droite dans la position ci-dessus, on obtient la position :
3 7 4
1 0 8
2 5 6
Le déplacement en diagonale n'est pas autorisé. L'objectif du jeu est de parvenir à la position suivante (que l'on qualifie de gagnante) :
1 2 3
4 5 6
7 8 0
Codage du jeu.
Pour continuer, il nous faut préciser ce que l'on entend par position. Une position est une structure de type position_t qui contient les champs suivants :
Fonctions de manipulation.
Pour manipuler une position, on a besoin des fonctions suivantes :
Pour résoudre le problème du taquin on propose d'utiliser l'algorithme suivant :
  1. Construisez une cellule à partir de la position initiale et ajouter la dans une file vide.
  2. Examiner la position de tête de la file. Si elle est gagnante, aller à l'étape 4. Sinon, aller à l'étape 3.
  3. Déterminer l'ensemble des déplacements possibles. Pour chacun d'entre eux, créer une nouvelle position associée à ce déplacement et une nouvelle cellule contenant cette dernière ; ajouter cette cellule à la fille.
  4. C'est fini. Il ne reste qu'à afficher la solution trouvée.
Questions.
  1. Donnez la déclaration du type position_t.
  2. Donnez les définitions des 3 fonctions de manipulation décrites ci-dessus.
  3. Donnez la définition de la fonction char * solve(struct position_t); qui résoud le problème du taquin.




Pour tout commentaire : Alexandre Sedoglavic.
Précédent Remonter Suivant