appel recursif qui ne marche pas

appel recursif qui ne marche pas - C - Programmation

Marsh Posté le 12-06-2007 à 16:49:11    

Voila j'ai un problème avec ce code :

Code :
  1. void colorier (int c,int i, int j)
  2. {
  3. int i_suiv=i,j_suiv=j,c_suiv;
  4. Liste ind;
  5. G[i_suiv][j_suiv]=c;
  6. affichage_grille(G);
  7. nbcc++;
  8. if (nbcc==81)
  9. {
  10. printf("\n nbcc=%d\n",nbcc);
  11. nbsol++;
  12. affichage_grille(G);
  13. }
  14. else
  15. {
  16. printf("\n else ok\n" );
  17. while (G[i_suiv][j_suiv]!=0)
  18.  {
  19.  printf("while ok\n" );
  20.  if (j_suiv<=7)
  21.   {
  22.   printf("if ok\n" );
  23.   j_suiv++;
  24.   }
  25.  else
  26.   {
  27.   printf("else2 ok\n" );
  28.   if (i_suiv<=7){i_suiv++;j_suiv=0;}
  29.   else printf("fin\n" );
  30.   }
  31.  printf("prelsite\n" );
  32.  ind=T[i_suiv][j_suiv];
  33.  printf("suivante c ok\n" );
  34.  while (ind!=NULL)
  35.   {
  36.    printf("while 2 ok\n" );c_suiv=ind->valeur;
  37.    if (admissible(c_suiv,i_suiv,j_suiv)==0)
  38.    {
  39.    printf("||ajout||" );
  40.    colorier(c_suiv,i_suiv,j_suiv);
  41.    }
  42.    printf("ifpasse" );
  43.    ind=ind->suivant;
  44.   }
  45.  }
  46.    }                     
  47. G[i][j]=0;
  48. nbcc--;
  49. }


 
C'est un sudoku et cette fonction doit mettre une valeur dans la grille et passer a la case suivante la colorier et tester a chaque fois si une valeur de T (contenant les valeurs possibles) n'est pas contraire aux regles du jeu. Cependant voici le resultat qui ca me donne :
 

Code :
  1. +---+---+---+
  2. |304|690|001|
  3. |090|003|000|
  4. |600|010|089|
  5. +---+---+---+
  6. |070|100|004|
  7. |042|000|190|
  8. |900|008|020|
  9. +---+---+---+
  10. |410|060|003|
  11. |000|500|010|
  12. |200|031|400|
  13. +---+---+---+
  14. else ok
  15. while ok
  16. if ok
  17. prelsite
  18. suivante c ok
  19. +---+---+---+
  20. |504|690|001|
  21. |090|003|000|
  22. |600|010|089|
  23. +---+---+---+
  24. |070|100|004|
  25. |042|000|190|
  26. |900|008|020|
  27. +---+---+---+
  28. |410|060|003|
  29. |000|500|010|
  30. |200|031|400|
  31. +---+---+---+
  32. else ok
  33. while ok
  34. if ok
  35. prelsite
  36. suivante c ok
  37. +---+---+---+
  38. |704|690|001|
  39. |090|003|000|
  40. |600|010|089|
  41. +---+---+---+
  42. |070|100|004|
  43. |042|000|190|
  44. |900|008|020|
  45. +---+---+---+
  46. |410|060|003|
  47. |000|500|010|
  48. |200|031|400|
  49. +---+---+---+
  50. else ok
  51. while ok
  52. if ok
  53. prelsite
  54. suivante c ok
  55. +---+---+---+
  56. |804|690|001|
  57. |090|003|000|
  58. |600|010|089|
  59. +---+---+---+
  60. |070|100|004|
  61. |042|000|190|
  62. |900|008|020|
  63. +---+---+---+
  64. |410|060|003|
  65. |000|500|010|
  66. |200|031|400|
  67. +---+---+---+
  68. else ok
  69. while ok
  70. if ok
  71. prelsite
  72. suivante c ok


 
Donc la fonction se rappelle mais sur la même case et s'arrete quand elle a essayer les 4 possibilité pour la première case. Je tient a préciser que les fonctions admissible et la fonction trouvant les valeurs possible et les stockant fonctionne bien .
Quelqu'un a une idée ? je deviens fou perso  :pt1cable:


Message édité par clawfire le 12-06-2007 à 17:00:45
Reply

Marsh Posté le 12-06-2007 à 16:49:11   

Reply

Marsh Posté le 12-06-2007 à 16:56:19    

Tiens ? J'ai déjà vu ce code quelque part.  [:noxauror]

Reply

Marsh Posté le 12-06-2007 à 17:00:12    

c'est en effet possible :$ As tu donc une idée ?


Message édité par clawfire le 12-06-2007 à 17:00:29
Reply

Marsh Posté le 12-06-2007 à 17:04:02    

Elmoricq a écrit :

Tiens ? J'ai déjà vu ce code quelque part.  [:noxauror]


Ils doivent être de la même école [:god]


---------------
Töp of the plöp
Reply

Marsh Posté le 12-06-2007 à 17:06:21    

Je viens de voir ... en effet et on est pas les 2 seuls a avoir des problèmes

Reply

Marsh Posté le 12-06-2007 à 17:18:10    

Par contre vous avez le même code. Quelle coïncidence ! [:dawak]

Reply

Marsh Posté le 12-06-2007 à 17:27:24    

et bien la fonction la je l'ai écrite avec mes ptits doigts sur mon ptit pc portable donc bon ... apres qu'on ai le même code ca se tient si on a la meme fonction a faire nan ?

Reply

Marsh Posté le 13-06-2007 à 09:17:03    

Et bien, je ne vois pas ou ta fonction fait sa récursivité
"||ajout||\n" devrait s'afficher pour qu'il y est récursivité, hors je ne le vois pas ; donc ind vaut NULL. A toi de trouver pourquoi.
On ne sait meme pas initialement ce que vallent les paramètres de ta fonction coloriser. On ne sais pas non plus ce que peut renvoyer admissible.
 
Nan, ca se tient pas dans le sens ou on a pas l'impression que toi même tu comprennes ce que 'tu' as codé. Cherche un peu.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed