Votre question

Problème solveur sudoku

Tags :
  • Sudoku
  • Programmation
  • Langage C
Dernière réponse : dans Programmation
29 Octobre 2016 02:37:52

Salut, j'ai essayer de faire un solveur de sudoku basique, le problème c'est qu'une fois qu'il à résolue ma grille, il la remet à zéro, du coup quand je l'affiche après résolution, je me retrouve avec la même qu'au départ, et là, je vois vraiment pas d'où ça vient :/ 

Ma fonction de résolution :

  1. bool Resoudre(char grille[9][9], int i, int j){
  2. char x;
  3. int X;
  4. if (i == 8 && j == 8)
  5. return true;
  6.  
  7. if (grille[i][j] != '0'){
  8. if(i == 8){
  9. Resoudre(grille,0,j+1);
  10. }
  11. else
  12. Resoudre(grille,i+1,j);
  13. }
  14. else
  15. for (X=1; X <= 9; X++){
  16. if(X==1){
  17. x='1';}
  18. else if(X==2){
  19. x='2';}
  20. else if(X==3){
  21. x='3';}
  22. else if(X==4){
  23. x='4';}
  24. else if(X==5){
  25. x='5';}
  26. else if(X==6){
  27. x='6';}
  28. else if(X==7){
  29. x='7';}
  30. else if(X==8){
  31. x='8';}
  32. else if(X==9){
  33. x='9';}
  34.  
  35. if(AbsentLigne(x,grille,i) == true && AbsentColonne(x,grille,j) == true && AbsentRegion(x,grille,i,j) == true){
  36. grille[i][j] = x;
  37. if(Resoudre(grille, i, j)){
  38. return true;
  39. }
  40. else
  41. grille[i][j] = '0';
  42. }
  43. }
  44. return false;
  45. }


Mon main :

  1. int main()
  2. {
  3. char grille[9][9] =
  4. {
  5. {'2','0','0','9','0','0','0','0','0'},
  6. {'1','0','7','4','0','0','6','0','0'},
  7. {'0','0','4','5','0','2','7','0','1'},
  8. {'0','0','8','2','4','3','1','0','5'},
  9. {'0','3','0','0','9','0','0','8','0'},
  10. {'4','0','1','8','7','5','2','0','0'},
  11. {'8','0','5','3','0','4','9','0','0'},
  12. {'0','0','9','0','0','6','8','0','3'},
  13. {'0','0','0','0','0','9','0','0','4'}
  14. };
  15.  
  16. if(AbsentLigne('5', grille, 0) == true)
  17. printf("Absent\n");
  18. else
  19. printf("Present\n");
  20. if(AbsentColonne('5', grille, 1) == true)
  21. printf("Absent\n");
  22. else
  23. printf("Present\n");
  24. if(AbsentRegion('5', grille, 0, 1) == true)
  25. printf("Absent\n");
  26. else
  27. printf("Present\n");
  28. affichage(grille);
  29. printf("\n");
  30. Resoudre(grille,0,0);
  31. affichage(grille);
  32.  
  33.  
  34. return 0;
  35. }

Mon affichage :

  1. void affichage (char grille[9][9])
  2. { int i,j;
  3. for (i=0; i<9; i++)
  4. {
  5. for (j=0; j<9; j++)
  6. {
  7. printf( ((j+1)%3) ? "%c " : "%c|", grille[i][j]);
  8. }
  9. putchar('\n');
  10. if (!((i+1)%3))
  11. puts("------------------");
  12. }
  13. puts("\n\n");
  14. }

Merci d'avance !

Autres pages sur : probleme solveur sudoku

a b L Programmation
31 Octobre 2016 09:25:47

Apparemment la seule raison pour laquelle la grille se met à 0 ne peut être que la ligne :

grille[j] = '0';

Ce qui veut dire que

Resoudre(grille, i, j) renvoie toujours faux

Peut-être que si un ligne est complète ton programme ne sait pas quoi faire ?
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS