Partage
  • Partager sur Facebook
  • Partager sur Twitter

Sudoku - Unicité de la solution

Encore un sudoku...

    19 mai 2012 à 14:54:21

    Bonjour,

    Je cherche à faire un jeu presque complet de sudoku, et malheureusement je bute depuis plusieurs jours sur le problème suivant : en générant une grille complète dans laquelle je retire des cases, il faudrait qu'à chaque fois que je retire une case je vérifie que la solution du sudoku reste unique. J'ai pour cela implémenté un solveur, mais je ne sais pas si celui-ci me retourne tout le temps UNE solution valide ou s'il est possible de lui en faire envoyer 2, voir simplement le nombre de solutions qu'il a pu trouver.
    Voici le code en question :
    public boolean solve(int i, int j, int[][] grille) {
            if (i == 9) {
                i = 0;
                if (++j == 9) {
                    return true;
                }
            }
            if (grille[i][j] != 0) // skip filled cells
            {
                return solve(i + 1, j, grille);
            }
    
            for (int val = 1; val <= 9; ++val) {
                if (legal(i, j, val, grille)) {
                    grille[i][j] = val;
                    if (solve(i + 1, j, grille)) {
                        return true;
                    }
                }
            }
    
            grille[i][j] = 0; // reset on backtrack
            return false;
        }
    


    Sachant que la méthode legal renvoie vrai ou faux selon si on a le droit de mettre val dans la cellule de coordonnées i,j, dans la grille de sudoku grille.

    Cette méthode marche plutôt bien, elle résoud un sudoku assez vite. Mais comment l'utiliser afin de compter le nombre de solutions possibles à un sudoku à chaque fois que l'on enlève une case ?

    Merci beaucoup :)
    • Partager sur Facebook
    • Partager sur Twitter

    Sudoku - Unicité de la solution

    × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
    × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
    • Editeur
    • Markdown