Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
486
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.62 KB | None | 0 0
  1. #include <conio2.h>
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <time.h>
  5.  
  6. // Resolvemos el sudoku sin aleatorios, partiendo desde el 1 hasta el 9 uno por uno..
  7.  
  8.  
  9.  
  10.  
  11.  
  12. int sudoku[10][10];
  13. int check_col (int col,int num); // Funcion donde compruebo conflicto en columna
  14. int check_row (int row,int num); // Funcion donde compruebo conflicto en fila
  15. int check_cubo (int row,int col,int num); // Funcion donde compruebo conflicto en ubo
  16. int resolver (int row,int col); // Funcion que resuelve el sudoku en la posicion x,y (0,0)
  17. int siguiente (int row,int col); // Función que manda a resolver la siguiente posición...
  18. void mostrar (void); // Funcion que muestra nuesto sudoku (array 9x9) esté o no esté completo.
  19. void generar_raiz(void); // Función que genera 9 numeros aleatorios del 1-9 para la primera fila por lo que el sudoku es distinto cada vez
  20. void FIN (void); // Cuando se completa de solucionar se ejecuta esta función.
  21.  
  22. main() {
  23.    //  generar_raiz();
  24.        resolver(0,0);
  25.        
  26.                }
  27.  
  28. // Chekea Columna
  29. int check_col (int col,int num) {
  30.     for (int row=0;row < 8;row++) {
  31.         if (sudoku[row][col] == num) { return false; }
  32.         }
  33.         return true;
  34. }
  35.  
  36. // Checkea Fila
  37. int check_row (int row,int num) {
  38.     for (int col=0;col < 8;col++) {
  39.         if (sudoku[row][col]== num) { return false; }
  40.         }
  41.         return true;
  42. }
  43.  
  44. // Checkea Cubo
  45. int check_cubo (int row,int col,int num) { ;
  46.     row=(row/3)*3;
  47.     col=(col/3)*3;
  48.     for(int r=0; r < 3;r++) {
  49.     for(int c=0; c < 3;c++) {
  50.             if (sudoku[row+r][col+c]==num) { return false; }
  51.             }
  52.             }
  53.             return true;
  54. }
  55.  
  56. // Resolver el sudoku
  57.  
  58. int resolver (int row,int col) {
  59.     if(row>8) { FIN();  }
  60.     // Si la casilla no esta en blanco pasamos a la siguiente.
  61.     if(sudoku[row][col] != 0) { siguiente(row,col); }
  62.     else { //Encontramos un numero valido para la casilla libre..
  63.            for(int num=1;num<10;num++) { printf("for %i\n",num);
  64.                    if(check_row(row,num) && check_col(col,num) && check_cubo(row,col,num)) {
  65.                                          sudoku[row][col] = num;
  66.                                          siguiente(row,col);
  67.                                          }
  68.                                        }
  69.                         sudoku[row][col] = 0;
  70.                    }
  71. }
  72.            
  73.  
  74.  
  75.  
  76. // Siguiente casilla
  77.  
  78. int siguiente (int row,int col) {
  79.     if (col < 8) { // Si no hemos llegado a la ultima columna, sumamos una
  80.            resolver(row,col+1); printf("Siguiente columna\n");
  81.             }
  82.     else { //  Si llego la ultima columna la pongo a 0 y sumo una fila
  83.          printf("Siguiente fila\n");
  84.          resolver(row+1,0);  }
  85. }
  86.    
  87. // Mostrar Sudoku
  88. void mostrar(void) {
  89. for (int x=0;x<=8;x++) {
  90. for (int y=0;y<=8;y++) {
  91.     printf("%i ", sudoku[x][y]);
  92.     if(y==2) { printf("| "); }
  93.     if(y==5) { printf("| "); }
  94.     if(y==8) { printf("\n"); }
  95.     }
  96.     if(x==2) { printf("------+-------+------\n"); }
  97.     if(x==5) { printf("------+-------+------\n"); }
  98.     }
  99. }
  100.  
  101. // Cuando llegamos al final  ................
  102.  
  103. void FIN(void) {
  104.      printf("\n\tSolucion encontrada\n\n\tPulse una tecla para mostrar..");
  105.      getch();
  106.      clrscr();
  107.      mostrar();
  108.      getch();
  109.      exit(0);
  110.      }
  111.      
  112. //Genero primera fila aleatoria que hará que todo lo demás sea aleatorio.
  113.  
  114. void generar_raiz (void) {
  115.      srand(time(NULL));
  116.      int numgen=rand()%10;
  117.    for (int n=0;n<=8;n++) {
  118.      for (int x=0;x<=8;x++) {
  119.         if (numgen==sudoku[0][x]) { numgen=rand()%10; x=-1; }
  120.     }
  121. sudoku[0][n]=numgen;
  122. }
  123. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement