Algo résolution de sudoku.

Soyez le premier à donner votre avis sur cette source.

Snippet vu 8 856 fois - Téléchargée 15 fois

Contenu du snippet

Bonjour,

ben voici mon algo de résolution d'un sudoku que j'ai utiliser pour mon programme SudoBrol.

Voila, j'aimerais avoir vos avis.

Source / Exemple :


//-----------------------------------------
// Vérification des lignes et des colonnes.
//-----------------------------------------

    int ligne, colonne, pave, erreur=0;

    for(int a=1; a<=9; a++)
    {
        for(int b=1; b<=9; b++)
        {
            ligne=0;
            colonne=0;

            for(int c=1; c<=9; c++)
            {
                if(b==sudoku[a][c])
                {
                    ligne++;
                }
                if(b==sudoku[c][a])
                {
                    colonne++;
                }
                if(ligne>1||colonne>1)
                {
                    erreur++;
                }
            }
        }
    }

//-----------------------------------------
// Vérification des pavés.
//-----------------------------------------

    for(int a=0; a<=6; a+=3)
    {
        for(int b=0; b<=6; b+=3)
        {
            for(int c=1; c<=9; c++)
            {
                pave=0;

                for(int d=1+b; d<=3+b; d++)
                {
                    for(int e=1+a; e<=3+a; e++)
                    {
                        if(c==sudoku[d][e])
                        {
                            pave++;
                        }
                        if(pave>1)
                        {
                            erreur++;
                        }
                    }
                }
            }
        }
    }

//-----------------------------------------

A voir également

Ajouter un commentaire

Commentaires

Messages postés
10
Date d'inscription
dimanche 12 octobre 2008
Statut
Membre
Dernière intervention
5 août 2010

Mon code est très bien comme ca pour le moment, je l'utilise dans mon programme SudoBrol. Je poseterais l'algo de génération plus tard. Pour ceux qui voudrais SudoBrol envoyer moi un mail mamsk@live.be
Messages postés
11
Date d'inscription
mardi 6 décembre 2005
Statut
Membre
Dernière intervention
19 mai 2009

Je dirais simplement que c'est plus un algo de verification qu'un algo de resolution...
Si tu as un sudoku "neuf" cet algo ne le rempliras pas...

Si ton but est simplement de verifier et que tu veux etre optimale le mieux selon moi serais d'avoir un array chiffre[9] et que pour admettons chaque ligne tu fais chiffre[sudoku[a][b]]++ et tu tu verifie par le fait meme, en t'assurant de ne pas depasser 1, tout les chiffres d'une meme ligne d'un seul coup...

Tu dois ensuite repeter pour chaque colonnes et chaques paves, mais c'est deja beaucoup plus rapide!
Messages postés
4
Date d'inscription
samedi 3 septembre 2005
Statut
Membre
Dernière intervention
11 mai 2009

Tu fais quand même 18 tests par case. Il y a moyen de ne faire que 3 tests par case si je ne me trompe pas
Messages postés
10
Date d'inscription
dimanche 12 octobre 2008
Statut
Membre
Dernière intervention
5 août 2010

Oui l'algo marche très bien, je l'utilise dans mon programme SudoBrol.
Messages postés
4
Date d'inscription
samedi 3 septembre 2005
Statut
Membre
Dernière intervention
11 mai 2009

Ah ok je viens de comprendre! J'ai pas testé mais je suppose que tu l'as fait et moi en tout cas ca me semble correcte. Mais j'avais fait il y a longtemps un programme de résolution de sudoku et ca utilisait un système de masques, qui je crois est beaucoup plus rapides (beaucoup moins de tests). Ici, pour un programme de vérification comme le tien, il y a surement moyen d'utiliser un système de masques aussi et ca serait quand meme beaucoup mieux.
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.