IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Solveur sudoku (chercher l'erreur)


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 6
    Points : 7
    Points
    7
    Par défaut Solveur sudoku (chercher l'erreur)
    Bonjour à tous,

    voila comme projet de fin d'année (comme beaucoup de monde) j'ai le classique sudoku à développer en C.
    Je rencontre un probleme au niveau d'un compteur situé sur ma grille[11][10] : la premiere ligne et premiere colonne sont
    réservés aux compteurs (respectivement de colonnes et lignes). La derniere ligne contient les compteurs de chaque pavé (colonne 1 => pavé 1)
    Mon cube des possibilités est fait comme ceci : cube[11][10][10]
    Meme principe au niveau des compteurs. Ces lignes sont inutilisées pour le plan 0 et initialisées a 1.
    Les cellules des lignes et colonnes 1 à 9 contiennent le nombre de possibilités par case de la grille.
    Les plan suivant : 0 si pas possible, 1 si possible.
    Bref.
    Apres ma troisième méthode de résolution, le compteur en grille[0][0] bug.
    J'ai beau regarder, je ne trouve pas d'ou cela vient.

    Je précise que MAX = 9 et MAX2 = 3


    Ma methode 3 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
     
    // RESOLUTION DE LA GRILLE METHODE 3
    /* Parcours par ligne, colonne et region chaque plan pour voir si une valeur est possible 
    une seule fois. Si oui, la valeur est celle de la case.	*/
    void methode3(Cube c, Grille grille)
    {	int i, j, k, lig, col;
    	for(k=1;k<=MAX;k++)
    	{	for(i=1;i<=MAX;i++)
    		{
    			if(c[i][0][k]==1){	for(j=1;j<=MAX;j++) // Lignes
    						{	if(c[i][j][k]==1)
    							{grille[i][j]=k;
    							majCaseGrilleCube(c,i,j,k);
    							majCompteurs(grille,i,j);}
    						}
    					}
    			if(c[0][i][k]==1){	for(j=1;j<=MAX;j++) // Colonnes
    						{	if(c[j][i][k]==1)
    							{grille[j][i]=k;	
    							majCaseGrilleCube(c,j,i,k);
    							majCompteurs(grille,j,i);}
    						}
    					}
    			if(c[MAX+1][i][k]==1)	{// Regions
    						for(lig=1+(i-1)/MAX2*MAX2;lig<1+(i-1)/MAX2*MAX2+MAX2;lig++)
    							{	for(col=1+(i-1)%MAX2*MAX2;col<1+(i-1)%MAX2*MAX2+MAX2;col++)
    								{	if(c[lig][col][k]==1)
    									{ grille[lig][col]=k;	
    									majCaseGrilleCube(c,lig,col,k);
    									majCompteurs(grille,lig,col);}
     
    								}
    							}
    						}
    		}
    	}
    }
    majCompteurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    void majCompteurs(Grille grille, int i, int j)
    {	grille[0][j]++;
    	grille[i][0]++;
    	grille[0][0]++;
    	grille[MAX+1][region(i,j)]++;
    }
    majCaseGrilleCube :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
     
    void majCaseGrilleCube(Cube cube, int i, int j, int v)
    {	int l, c, ideb=1+(i-1)/MAX2*MAX2, jdeb=1+(j-1)/MAX2*MAX2;
    	for(c=1;c<=MAX;c++)
    	{	if(cube[i][c][v] == 1)
    		{	majCaseCube(cube,i,c,v);//Maj de la ligne
    		}
    	}
    	for(l=1;l<=MAX;l++)
    	{	if(cube[l][j][v] == 1)
    		{	majCaseCube(cube,l,j,v);//Maj de la colonne
    		}
    	}
    	for(l=ideb;l<ideb+MAX2;l++)
    	{	for(c=jdeb;c<jdeb+MAX2;c++)
    		{	if(cube[l][c][v] == 1)
    			{	majCaseCube(cube,l,c,v);	}
    				//Maj de la region
    		}
    	}
    	cube[i][j][0]=0;
    }
    et majCaseCube :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void majCaseCube(Cube cube, int x, int y, int v)
    {	if(cube[x][y][v] == 1)
    	{	cube[x][y][v]=0;	// 1 -> 0
    		cube[0][y][v]--;
    		cube[x][0][v]--;
    		cube[MAX+1][region(x,y)][v]--;
    		if(cube[x][y][0]>0)
    		{
    			cube[x][y][0]--;
    		}
    	}
    }
    Merci beaucoup à ceux qui se penchent sur mon probleme
    Si vous avez des questions ou que je me suis mal expliqué, ce qui ne m'étonnerais pas... j'y répond.
    Je cherche aussi a faire une méthode par choix multiple (par hypothese)
    Si quelqu'un peut me mettre sur la voie, j'accepte votre aide ! J'ai deja bien commencer ma fonction mais elle ne donne
    pas grand chose pour le moment.
    Encore merci

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2011
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2011
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    Excusez moi j'ai trouvé l'erreur, elle etait en fait dans la methode 4.
    Pardon pour le derangement.
    Si ma methode 3 peut servir a quelqu'un, pourquoi pas.
    Je crois qu'elle fonctionne bien.

    Je suis toujours preneur d'informations concernant la methode à
    choix multiples.
    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme avec le solveur SuDoKu
    Par DeViLGoRe dans le forum C
    Réponses: 2
    Dernier message: 14/01/2008, 22h28
  2. Ou chercher l'erreur ?
    Par Tial dans le forum Access
    Réponses: 5
    Dernier message: 13/12/2007, 09h20
  3. Chercher l'erreur de syntaxe.
    Par molo2003 dans le forum Visual C++
    Réponses: 1
    Dernier message: 23/07/2007, 18h05
  4. Chercher l'erreur - Exercice VB.NET
    Par zurim dans le forum Windows Forms
    Réponses: 7
    Dernier message: 13/07/2007, 17h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo