diff --git a/app/src/main/java/sudoku/Grille.java b/app/src/main/java/sudoku/Grille.java index c0d57cf..6200fe5 100644 --- a/app/src/main/java/sudoku/Grille.java +++ b/app/src/main/java/sudoku/Grille.java @@ -65,18 +65,17 @@ public class Grille { if (symbole != null && !symbolesPossibles.contains(symbole)) { throw new IllegalArgumentException("Symbole non autorisé : " + symbole); } - // Sauvegarder l'ancien symbole - Symbole ancienSymbole = cases[ligne][colonne].getSymbole(); - // Affecter le nouveau symbole - cases[ligne][colonne].setSymbole(symbole); + Case currentCase = cases[ligne][colonne]; + Symbole ancienSymbole = currentCase.getSymbole(); + currentCase.setSymbole(symbole); - // Vérifier les contraintes - if (!sudoku.verifierToutesContraintes()) { - // Revenir sur le changement - cases[ligne][colonne].setSymbole(ancienSymbole); - throw new IllegalArgumentException("SET CASE: Les contraintes ne sont pas respectées pour la case (" - + ligne + ", " + colonne + ")"); + // Verify constraints including shared cases + if (!sudoku.verifierToutesContraintes() || + (multidoku != null && !multidoku.verifierContraintesPartagees())) { + currentCase.setSymbole(ancienSymbole); + throw new IllegalArgumentException( + "Les contraintes ne sont pas respectées pour la case (" + ligne + ", " + colonne + ")"); } } catch (Exception e) { Console.errorln(e.getMessage()); @@ -84,14 +83,14 @@ public class Grille { } // public void setCaseAvecPropagation(int ligne, int colonne, Symbole symbole) { - // // Affecte la valeur dans la grille courante - // setCase(ligne, colonne, symbole); + // // Affecte la valeur dans la grille courante + // setCase(ligne, colonne, symbole); - // // Si cette case est partagée et qu'il y a un multidoku, on propage - // // immédiatement la valeur - // if (multidoku != null && multidoku.isSharedCase(getCase(ligne, colonne))) { - // multidoku.propagateSharedCase(getCase(ligne, colonne), symbole); - // } + // // Si cette case est partagée et qu'il y a un multidoku, on propage + // // immédiatement la valeur + // if (multidoku != null && multidoku.isSharedCase(getCase(ligne, colonne))) { + // multidoku.propagateSharedCase(getCase(ligne, colonne), symbole); + // } // } public Case getCase(int ligne, int colonne) { diff --git a/app/src/main/java/sudoku/Multidoku.java b/app/src/main/java/sudoku/Multidoku.java index bcdcdbb..8853c3a 100644 --- a/app/src/main/java/sudoku/Multidoku.java +++ b/app/src/main/java/sudoku/Multidoku.java @@ -3,12 +3,10 @@ package sudoku; import java.util.*; public class Multidoku { - private List sudokus; private List placements = new ArrayList<>(); private List contraintesPartagees; public Multidoku() { - this.sudokus = new ArrayList<>(); this.contraintesPartagees = new ArrayList<>(); } @@ -219,12 +217,10 @@ public class Multidoku { public class ContrainteCasePartagee implements Contrainte { private Map casesLiees; // Map associant chaque case à sa correspondante private Set sudokusLies; - private Multidoku multidoku; public ContrainteCasePartagee(List cases, Multidoku multidoku) { this.casesLiees = new HashMap<>(); this.sudokusLies = new HashSet<>(); - this.multidoku = multidoku; // Les cases sont données dans l'ordre : d'abord celles du premier sudoku, // puis celles du second dans le même ordre diff --git a/app/src/main/java/sudoku/ResolveurBacktraceSimple.java b/app/src/main/java/sudoku/ResolveurBacktraceSimple.java index 6509f79..93d95fe 100644 --- a/app/src/main/java/sudoku/ResolveurBacktraceSimple.java +++ b/app/src/main/java/sudoku/ResolveurBacktraceSimple.java @@ -4,12 +4,6 @@ import java.util.List; public class ResolveurBacktraceSimple implements Resolveur { - private final Sudoku sudoku; - - public ResolveurBacktraceSimple(Sudoku sudoku) { - this.sudoku = sudoku; - } - @Override public boolean resoudre(Sudoku s, boolean afficherEtape) { EtatResolution etat = new EtatResolution(0, 0); diff --git a/app/src/main/java/sudoku/Sudoku.java b/app/src/main/java/sudoku/Sudoku.java index d83b0d3..52b500c 100644 --- a/app/src/main/java/sudoku/Sudoku.java +++ b/app/src/main/java/sudoku/Sudoku.java @@ -136,7 +136,7 @@ public class Sudoku { } private void resolutionSudoku(Sudoku sudoku, boolean afficherEtape) { - ResolveurBacktraceSimple resolveur = new ResolveurBacktraceSimple(sudoku); + ResolveurBacktraceSimple resolveur = new ResolveurBacktraceSimple(); resolveur.resoudre(sudoku, afficherEtape); System.out.println("Sudoku résolu :"); System.out.println(sudoku.getGrille().toString()); diff --git a/app/src/test/java/sudoku/AppTest.java b/app/src/test/java/sudoku/AppTest.java index e7756a8..e404422 100644 --- a/app/src/test/java/sudoku/AppTest.java +++ b/app/src/test/java/sudoku/AppTest.java @@ -59,7 +59,7 @@ public class AppTest { System.out.println(sudoku.getGrille().toString()); - Resolveur resolveur = new ResolveurBacktraceSimple(sudoku); + Resolveur resolveur = new ResolveurBacktraceSimple(); resolveur.resoudre(sudoku, false); System.out.println("Sudoku résolu :"); System.out.println(sudoku.getGrille().toString()); diff --git a/app/src/test/java/sudoku/TestBlocParticuliers.java b/app/src/test/java/sudoku/TestBlocParticuliers.java index d517608..6ef1b89 100644 --- a/app/src/test/java/sudoku/TestBlocParticuliers.java +++ b/app/src/test/java/sudoku/TestBlocParticuliers.java @@ -58,7 +58,7 @@ public class TestBlocParticuliers { System.out.println("Symboles possibles :"); sudoku.getGrille().printSymbolesPossibles(); - ResolveurBacktraceSimple resolveur = new ResolveurBacktraceSimple(sudoku); + ResolveurBacktraceSimple resolveur = new ResolveurBacktraceSimple(); resolveur.resoudre(sudoku, true); System.out.println("Sudoku résolu :"); diff --git a/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku9.java b/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku9.java index 87216c0..f8e0cba 100644 --- a/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku9.java +++ b/app/src/test/java/sudoku/TestResolveurBacktraceSimpleSudoku9.java @@ -48,7 +48,7 @@ public class TestResolveurBacktraceSimpleSudoku9 { System.out.println("Symboles possibles :"); sudoku.getGrille().printSymbolesPossibles(); - ResolveurBacktraceSimple resolveur = new ResolveurBacktraceSimple(sudoku); + ResolveurBacktraceSimple resolveur = new ResolveurBacktraceSimple(); resolveur.resoudre(sudoku, false); System.out.println("Sudoku resolu :"); System.out.println(sudoku.getGrille().toString());