[Résolu] Sudoku, trouver les coordonnées d'un tableau 3x3

Sudoku, trouver les coordonnées d'un tableau 3x3 [Résolu] - C - Programmation

Marsh Posté le 27-05-2008 à 19:57:35    

Salut tout le monde,
je suis en train de développer un Sudoku en langage C, et j'en suis à la phase des 3 règles.
C'est à dire qu'un joueur ne peut pas rentrer un chiffre si celui-ci est déjà présent dans la ligne, dans la colonne ou dans la région 3x3 où il se trouve.
 
Pour les deux premiers cas, pas de problème, je sais les gérer, par contre le dernier me pose quelques soucis.
 
Idéalement, je devrai avoir deux for imbriqués qui ne font chacun que trois tours.
 

Code :
  1. int_num_lig = (num_lig+1)/3;
  2.     int_num_col = (num_col+1)/3;
  3.     for(i=int_num_lig; i<int_num_lig+1; i++)
  4.     {
  5.         for(j=int_num_col; j<int_num_lig+1; j++)
  6.         {
  7.             if(chiffre == grille[i][j])
  8.                 return 0;
  9.         }
  10.     }


 
num_lig et num_col +1 parce que ceux-ci commencent à 0.
Le problème, c'est que ma condition d'arrêt ne fonctionne pas, et je n'arrive pas à la trouver :/
 
Votre aide me serait précieuse, merci :jap:


Message édité par koskoz le 27-05-2008 à 20:24:35

---------------
Twitter
Reply

Marsh Posté le 27-05-2008 à 19:57:35   

Reply

Marsh Posté le 27-05-2008 à 20:13:08    

Code :
  1. /*
  2. *  fichier estDansRegion.cpp
  3. *  M. MAURICARD François-Xavier Pascal - 05/12/2005
  4. *
  5. * ¤ Cherche s'il existe la valeur dans la region de la position considérée de la grille. ¤
  6. * PRE : (0 <= pos.col <= 8) && (0 <= pos.lig <= 8)  && (1 <= val <= 9).
  7. *
  8. */
  9. #include "Sudoku.h"
  10. bool estDansRegion(const position &pos, const int val, const int grille[9][9])
  11. {
  12. bool res = false;
  13. // Calcul des coordonées de la case de début de la region.
  14. int debut_region_x = (pos.lig / 3) * 3;
  15. int debut_region_y = (pos.col / 3) * 3;
  16. for (int x = debut_region_x ; x < debut_region_x + 3 && !res ; x++) // Parcours des lignes.
  17. {
  18.  for (int y = debut_region_y ; y < debut_region_y + 3 && !res ; y++) // Parcours des colonnes.
  19.  {
  20.   res = (grille[x][y] == val);
  21.  }
  22. }
  23. return res;
  24. }


 


---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Marsh Posté le 27-05-2008 à 20:18:40    

J'ai un peu de mal à comprendre pourquoi vous divisez par 3 pour ensuite multiplier par 3 ?
J'ai rien dit, on récupère l'entier de la division qui est ensuite multiplié par 3.

 

Et le +3 dans chaque boucle ne nous fera pas sortir de la région pour passer à une autre adjacente ?

 

C'est ce que je voulais faire mais j'avais des difficultés à l'exprimer.

 

Merci :jap:


Message édité par koskoz le 27-05-2008 à 20:24:07

---------------
Twitter
Reply

Marsh Posté le 27-05-2008 à 20:23:35    

Moi j'avais fait ça empiriquement. :D
 
Mais en gros comme c'est une division entiere (x / 3) * 3 donne le multiple de 3 correspondant au nombre, donc la premiere case de la region.
 
Et on on fais plus trois car une region fait 3... et que bien sur on veut regarder que ces 3 cases là.


Message édité par MEI le 27-05-2008 à 20:24:24

---------------
| AMD Ryzen 7 7700X 8C/16T @ 4.5-5.4GHz - 64GB DDR5-6000 30-40-40 1T - AMD Radeon RX 7900 XTX 24GB @ 2680MHz/20Gbps |
Reply

Sujets relatifs:

Leave a Replay

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