diff --git a/Main$1.class b/Main$1.class new file mode 100644 index 0000000..1b7c63c Binary files /dev/null and b/Main$1.class differ diff --git a/Main.class b/Main.class index 90fd4f0..94c366e 100644 Binary files a/Main.class and b/Main.class differ diff --git a/Main.java b/Main.java index b4b1d66..392b533 100644 --- a/Main.java +++ b/Main.java @@ -1,5 +1,8 @@ import javax.swing.*; import java.awt.BorderLayout; +import java.awt.event.ActionListener; +import java.awt.event.ActionEvent; + public class Main { @@ -27,6 +30,19 @@ public class Main { // Ajout de l'écouteur d'événements au bouton "Reset" resetButton.addActionListener(new Reset(grid, enterPanel)); + // Ajout de l'écouteur d'événements au bouton "Solve" + solveButton.addActionListener(new ActionListener() { + @Override + public void actionPerformed(ActionEvent e) { + if (Resolve.solveSudoku(grid)) { + enterPanel.repaint(); // Redessiner la grille après la résolution + JOptionPane.showMessageDialog(frame, "Grille résolue avec succès !"); + } else { + JOptionPane.showMessageDialog(frame, "Impossible de résoudre la grille."); + } + } +}); + frame.pack(); frame.setLocationRelativeTo(null); // Centrer la fenêtre sur l'écran frame.setVisible(true); diff --git a/Resolve.class b/Resolve.class new file mode 100644 index 0000000..4e532ce Binary files /dev/null and b/Resolve.class differ diff --git a/Resolve.java b/Resolve.java new file mode 100644 index 0000000..29e570b --- /dev/null +++ b/Resolve.java @@ -0,0 +1,74 @@ +public class Resolve { + public static boolean solveSudoku(int[][] grid) { + int row = -1; + int col = -1; + boolean isEmpty = true; + + // Recherche d'une cellule vide dans la grille + for (int i = 0; i < grid.length; i++) { + for (int j = 0; j < grid[i].length; j++) { + if (grid[i][j] == 0) { + row = i; + col = j; + // Cellule vide trouvée + isEmpty = false; + break; + } + } + if (!isEmpty) { + break; + } + } + + // Si la grille est pleine, le sudoku est résolu + if (isEmpty) { + return true; + } + + // Essayer de placer les chiffres de 1 à 9 dans la cellule vide + for (int num = 1; num <= 9; num++) { + if (isValidMove(grid, row, col, num)) { + grid[row][col] = num; + // Résoudre récursivement le sudoku + if (solveSudoku(grid)) { + return true; + } + // Annuler la valeur si la solution n'est pas possible + grid[row][col] = 0; + } + } + // Aucune solution n'est possible pour cette cellule + return false; + } + + // Vérifie si un nombre peut être placé dans une cellule spécifique + private static boolean isValidMove(int[][] grid, int row, int col, int num) { + // Vérifie la ligne + for (int x = 0; x < 9; x++) { + if (grid[row][x] == num) { + return false; + } + } + + // Vérifie la colonne + for (int y = 0; y < 9; y++) { + if (grid[y][col] == num) { + return false; + } + } + + // Vérifie la région 3x3 + int regionRowStart = row - row % 3; + int regionColStart = col - col % 3; + for (int i = 0; i < 3; i++) { + for (int j = 0; j < 3; j++) { + if (grid[i + regionRowStart][j + regionColStart] == num) { + return false; + } + } + } + + // La valeur peut être placée dans cette cellule + return true; + } +}