Téléchargez comme DOCX, PDF, TXT ou lisez en ligne sur Scribd
Télécharger au format docx, pdf ou txt
Vous êtes sur la page 1sur 5
1.
Description du problème : Sudoku
Le Sudoku est un jeu de logique qui consiste à compléter une grille selon un ensemble de règles précises. Un sudoku classique se joue sur une grille de taille 9 × 9, soit 81 cases au total. La grille est partiellement pré-remplie. Chaque bloc de 3×3 cases peut contenir uniquement les chiffres de 1 a 9. Chaque colonne verticale peut contenir uniquement les chiffres de 1 a 9. Chaque ligne horizontale peut contenir uniquement les chiffres de 1 a 9. Chaque bloc de 3x3 cases, chaque colonne verticale et chaque ligne horizontale ne peuvent contenir chaque chiffre qu’une seule fois. La partie est terminee lorsque toute la grille de sudoku est correctement remplie.
2. Modelisation formelle :
grille de Sudoku. Chaque état s ∈ S représent une grille où certaines
2.1.Espace d’états ( S ) : S est l’ensemble des configurations possibles de la
cases peuvent être remplies ou vides.
2.2.États initial ( s0 ) : s0 est la grille partiellement remplie donnée au début du jeu, contenant les chiffres fixes imposés.
2.3. Ensemble d’actions ( A ) : A = { aijv | 1 ≤ i,j ≤ 9, 1 ≤ v ≤ 9 }, où une
action aijv consiste à placer le chiffre v dans la case située à la i-ème ligne et j-ème colonne, à condition que v ne soit pas déjà présent dans la i-ème ligne, la j-ème colonne et le bloc 3×3 contenant la case (i,j). 2.4.Fonction de successeur ( succ(s,a) ) : succ(s,a) retourne une nouvelle grille s’ obtenue en appliquant l’action aijv à l’état actuel s. Dans s’, la case (i,j) cotient le chiffre v. 2.5.Ensemble d’états terminaux ( T ) : T est l’ensemble des grilles entièrement remplies où chaque ligne, colonne et bloc 3×3 contient exactement les chiffres de 1 à 9, sans répétition. 2.6.Fonction de coût ( c(s,s’) ) : Le coût c(s,s’) est costant et égal à 1 pour chaque action, car le passage d’un état à un autre est défini par un seul placement de chiffre. Algorithme Sudoku(grille): Si estComplete(grille): Vérifie si la grille est complète et valide Return grille Retourner la solution trouvée (i,j) prochaineCaseVide(grille) Trouver le prochaine case vide Pour chaque valeur de 1 à 9: Essayer chaque valeur pour la case vide Si estValide(grille, i, j, valeur) Vérifier la validité de la valeur grille[i][j] valeur Assigner la valeur à la case (i,j) resultat Sudoku(grille) Appel récursif avec la grille mise à jour Si resultat ECHEC Si une solution est trouvé Return resultat Retourner la solution trouvée grille[i][j] ← VIDE # Annuler l'assignation et revenir en arrière (backtrack) Retourner ÉCHEC # Si aucune valeur ne mène à une solution, retourner échec Algorithm SudokuSolver(grid): if isComplete(grid): return grid # Grille complète et valide, solution trouvée (i, j) ← nextEmptyCell(grid) # Trouve la prochaine case vide for value in {1, 2, ..., 9}: if isValid(grid, i, j, value): # Vérifie les contraintes grid[i][j] ← value # Place le chiffre dans la case result ← SudokuSolver(grid) # Appelle récursivement if result ≠ FAILURE: return result # Solution trouvée, remonter l'état grid[i][j] ← EMPTY # Annule le placement en cas d'échec return FAILURE # Aucun chiffre ne convient pour cette case Function isComplete(grid): return all cells in grid are filled Function isValid(grid, i, j, value): return value not in row i, column j, and block 3×3 containing (i, j) Function nextEmptyCell(grid): return coordinates (i, j) of the first empty cell
Bulletin SISAV : Système d’Information sur la Sécurité Alimentaire et la Vulnérabilité dans les Régions Vatovavy Fitovinany, Atsimo Atsinanana, Androy et Anosy (Amboasary Atsimo), n°22, janvier-février 2016.pdf