Description Du Problème: Sudoku: 2.1.espace D'états (S)

Télécharger au format docx, pdf ou txt
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

Vous aimerez peut-être aussi