Résolution de grilles Slither Link
Sommaire Qu'est-ce qu'un slither-link ? Les contraintes Analyse du projet Programmation Conclusion
Qu'est ce qu'un Slither Link ? Casse-tête japonais Grille de points et de chiffres Allumer arêtes adjacentes aux chiffres Une seule et unique solution Un unique cycle d'arêtes
Les contraintes Représenter les données Définir structures de donnée pour la résolution Programmer résolution Expérimenter différentes méthodes Trace graphique
Représentation des données Fichier texte ex. : 7x7.txt « nbLignes »x « nbColonnes » « . » pour le degré neutre 0, 1, 2 ou 3 pour les autres degrés A l'exécution le fichier est appelé sans extension
Les contraintes Représenter les données Définir structures de donnée pour la résolution Programmer résolution Expérimenter différentes méthodes Trace graphique
Structures de données pour la résolution du problème Tableau statique de dimension 2 Chaque case contient une structure de données représentant un point, une arête ou une cellule Une pile (aide à la propagation)
Les contraintes Représenter les données Définir structures de donnée pour la résolution Programmer résolution Expérimenter différentes méthodes Trace graphique
Programmation de la résolution Utilisation du langage C Partage des codes avec le GitLab Compilation avec « gcc » et le débugeur « gdb »
Les contraintes Représenter les données Définir structures de donnée pour la résolution Programmer résolution Expérimenter différentes méthodes Trace graphique
Différentes méthodes Problèmes de propagation des règles : - parcours linéaire du tableau - propagation grâce à une pile - le Backtrack généralisé
Différentes méthodes Problèmes de propagation des règles : - parcours linéaire du tableau - propagation grâce à une pile - le Backtrack généralisé
Les contraintes Représenter les données Définir structures de donnée pour la résolution Programmer résolution Expérimenter différentes méthodes Trace graphique
Trace graphique Utilisation de « GDK » (GIMP drawing kit), sous bibliothèque de « GTK+ » Modes d'affichage : - Immédiat - Fluide - Pas-à-pas
Analyse du projet Représenter un slitherlink Règles de résolution Recherches
Représentation Un tableau 2D Une structure pour chaque case
Représentation Les cases Des informations indispensables Une même structure pour toutes les cases ? Différence point / cellule / arête
Analyse du projet Représenter un slitherlink Règles de résolution Recherches
Règles de résolution Les règles de base Les règles en boucle La règle des chemins
Règles de base Passage sur l'intégralité du tableau Applications des règles de bases Sauvegarde des coordonnées des cases modifiées
Règles de base Cellule zéro : Trois adjacents : Trois diagonal : (extension) Dans un coin :
Règles de résolution Les règles de bases Les règles en boucle La règle des chemins
Règles en boucle Récupération des coordonnées précédemment sauvegardées Application des règles en boucle Sauvegarde des nouvelles coordonnées modifiées On recommence...
Règles en boucle CompleterPoint CompleterCellule :
Règles en boucle Arête arrivant sur une cellule : Un diagonal :
Règles en boucle Mais aussi : Les règles dans un coin !
Règles en boucle Qu'est-ce qu'un coin ? Simplement des arêtes éteintes !
Règles de résolution Les règles de bases Les règles en boucle La règle des chemins
Règle des chemins Un slitherlink = UNIQUE CYCLE deux cycles ou plus sur le slitherlink alors ils ne peuvent pas se fermer On éteint les arêtes qui ferment ces cycles
Règle des chemins
Recherches Les règles sont-elles suffisantes pour résoudre entièrement un slitherlink ? Comment propager les règles ?
Développement Les informations de la structure Kase Simplification des appels avec des fonctions L'initialisation Application des règles et propagation Interface graphique
La structure Kase La structure Kase stocke les informations d'une case du tableau : Les coordonnées de la case Nombres d'arêtes incidentes allumées/éteintes Les coordonnées du chemin formé État de l'arete(0:éteinte, 1:allumée, -1:inconnu) Degré de la cellule Nombre d'arete adjacentes allumées/éteintes
Appels de fonctions Pour simplifié, nous avons utilisé quelques fonctions auxiliaires, par ex : <degeCellule> qui retourne le degré de la cellule <celluleDroite/Gauche/Haut/bas> retourne les coordonnées de la cellule à droite/gauche/haut/bas <miseAjour> affiche les points, les aretes verticales et horizontales allumées et éteintes <areteVerticale/Horizontale> vérifie si c'est une arete verticale/horizontale
Initialisation La création du tableau de dimension (2*nbligne+5,2*nbcolonne+5) à l'aide de la fonction creertab à partir de la taille récupérer du fichier .txt Éteindre les arêtes dont on a pas besoin c'est à dire les arêtes se situant en dehors du slitherlink en utilisant la fonction initbord
Application de règles et propagation D'abord, nous appliquons les règles de bases en passant sur toutes les cases du tableau, ceci nous permet d'allumer ou d'éteindre certaines arêtes du slitherlink et de garder les coordonnées de toutes les cases modifiées dans une pile Ensuite, La pile nous évite de reparcourir le tableau en cherchant une case satisfaisant une règle, voilà pour quoi nous avons décidé d'implémenter une pile de coordonnées, afin de propager les règles