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 :

Résolution Sudoku, demande aide...


Sujet :

C++

  1. #21
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 189
    Par défaut
    ca va toujours pas, ca commence a me desesperer tout ca
    snif

  2. #22
    Membre émérite Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Par défaut
    Il y a un truc que je comprends pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    pos.lig=i;
    pos.col=j;
    ... Pourquoi tu fais pas:
    A quoi ça sert d'utiliser un objet pour initialiser une variable de type int?
    Si je me trompe n'hésite pas à me le dire!
    Pourquoi ne pas les appeler lig_pos ou lig_es? Ca serait plus clair...

  3. #23
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 189
    Par défaut
    bonjour,

    entre temps j'ai changé...

    y a une structure essai fi

    tel que

    essai fi
    {
    position pos; // structure position contenant la position et la lig
    queue<int>fl;
    };

    voila donc ca serait fi.pos.lig et fi.pos.col

    mais ca marche tj pas...

    merci

  4. #24
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2
    Par défaut
    Salut les gars, je suis aussi de l'iut... (va falloir ouvrir un forum d'entraide rien que pour nous...)

    bon déjà je peux malheureusement pas t'aider alain. j'ai trouver une source en vb qui utilise apparament la même méthode, si tu as le temps et que tu connait un peu le vb, tu peux te pencher dessus, ca t'aidera peut-être.

    sinon, j'ai passé un bout de temps sur la même méthode que vous, et après un long débat avec une prof, bin cette méthode était à chier...^^, surtout qu'elle ne marchait pas vraiment chez moi. d'après ce qu'elle m'a dit, il faut :
    -une boucle principale qui tourne tant que la pile essais n'est pas vide ;
    -une boucle qui empile la pile essais ;
    -une autre qui la dépile.

    j'ai passé un petit moment à utiliser cet méthode, et j'ai pondu mon algo :

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
     
    void sudoku(int grille[9][9])
     
    {
     
    stack<essai> essais; // pile essais
     
    int i = 0;	// compteur des lignes de la grille
     
    int j = 0;	// compteur des colonnes de la grille
     
    essai e;	// essai sur lequel on travaille
     
     
     
    	/* si la 1ere case que l'on traite n'est pas vide, on passe à la suivante
     
    	   jusqu'a tomber sur une case vide
    	*/
     
    	while (grille[j][i] != 0)
     
    	{
     
    		augmenter(i,j);
     
    	}
     
     
     
    	// on définit les coordonnees de la 1ere case à traiter
     
    	e.pos.lig = i;
    	e.pos.col = j;
     
     
    	e.file = candidats(e.pos, grille);	
     
    	// on cherche les candidats pour la 1ere case
     
    	essais.push(e);		// on empile le 1er essai sur la pile essais
     
     
     
    	// boucle principale
     
    	while (!essais.empty())		// on travaille jusqu'a ce que la pile essais soit vide
     
    	{
     
    		e = essais.top();	// on va travailler sur le haut de la pile
     
    		essais.pop();		// on supprime l'essai sur lequel on travaille
     
     
    	// boucle qui empile essais, si la file de l'essai qui est sur le haut de la pile essais n'est pas vide
     
    		while(!e.file.empty())
     
    		{
     
    			grille[j][i] = e.file.front();	// on met le 1er candidat dans la grille
     
    			e.file.pop();			// et on le supprime de la file
     
    			essais.push(e);			// puis on empile ce qui reste
     
    			// on passe à la prochaine case vide
    			while (grille[j][i] != 0)
     
    			{
     
    				augmenter(i,j);
     
    			}
     
     
     
    			e.pos.lig = i;		// on définit ses coordonnees
     
    			e.pos.col = j;
     
    			e.file = candidats(e.pos,grille);	// on cherche ses candidats
     
     
     
    			// puis si la case qui suit a un candidat, on continue, sinon on sort
    		}
     
     
     
    		// boucle qui depile essais, si la file de l'essai qui est sur le haut de la pile essais est vide
     
    		while(e.file.empty())
     
    		{
     
    			e = essais.top();	// on recupere l'essai du haut de la pile
     
    			essais.pop();		// supprime l'essai en cours de la pile
     
     
     
    			// on se repositionne sur la case precedente
     
    			i = e.pos.lig;
    			j = e.pos.col;
     
     
     
    			grille[j][i] = 0;	// et on met cette case a 0
     
    			e = essais.top();	// puis on regarde à nouveau le haut de la pile ; si sa file est vide, on sort de la boucle, sinon, on recommence
     
    		}
     
     
     
    		if (j == 8 and i == 8)		// si on arrive sur la derniere case
     
    		{
     
    			cout << endl;		// on affiche la grille 
    			afficherCarre(grille);
     
    		}
     
    	}
    }
    une fois compiler, le programme me fait les 2 premières lignes, puis paf, plus de solution, il fait marche arrière, il prend un autre nombre dans la pile, il avance, et au début de la 3e ligne, re-marche arrière, et au final il me met 2x '9' dans une case, tourne encore et encore, me mets des erreurs partout, et finis sur un 'segmentation fault', parce que la pile essais est vide... si quelqu'un voit mon erreur, qu'il me fasse signe... moi je vvais encore passer 2 nuits dessus...

    voilà merci et bonne chance à toi alain

  5. #25
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    189
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 189
    Par défaut
    slt je regarde ça ce soir, et je te dis...

    encore merci...

    c clair que qu'il faudrait qu'on ouvre un forum d'entraide...

    merci

  6. #26
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 2
    Par défaut
    Attention, ma solution n'est pas juste, hein, il y a une erreur.. pas que tu la pompes comme ca ^^

    reggae, j'ai déjà regarder tout ca, mais les programmes ne fonctionnent pas exactement comme le notre ; et comme c'est un sujet distribué par les profs, il faut qu'on se tienne aux instructions...

Discussions similaires

  1. Réponses: 4
    Dernier message: 13/03/2006, 15h21
  2. HELP! Demande aide pour petit site à réaliser en ASP et JS
    Par itachi64 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 12/03/2006, 09h06
  3. Réponses: 2
    Dernier message: 11/03/2006, 19h34
  4. demande aide pour XML/XSL
    Par Jarod51 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 11/01/2006, 19h10
  5. débutante demande aide
    Par youna dans le forum Langage
    Réponses: 1
    Dernier message: 04/10/2005, 11h30

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