Ver Mensaje Individual
  #1 (permalink)  
Antiguo 04/11/2014, 12:21
kutcher
 
Fecha de Ingreso: noviembre-2014
Mensajes: 36
Antigüedad: 9 años, 11 meses
Puntos: 13
Algoritmo para resolver sudoku incomprensible

Buenas me he topado con un código un poco complicado de seguir, la cuestión es que se me hace difícil entender como logra aislar el número exacto en la posición requerida sin la necesidad (según veo) de una búsqueda exhaustiva como es común en este tipo de algoritmos, aquí el código :

Código C++:
Ver original
  1. int trycell(int *x, int pos)
  2. {
  3.     int row = pos / 9;
  4.     int col = pos % 9;
  5.     int i, j, used = 0;
  6.  
  7.     if (pos == 81)
  8.         return 1;
  9.     if (x[pos])
  10.         return trycell(x, pos + 1);
  11.  
  12.     for (i = 0; i < 9; i++)
  13.         used |= 1 << (x[i * 9 + col] - 1);
  14.  
  15.     for (j = 0; j < 9; j++)
  16.         used |= 1 << (x[row * 9 + j] - 1);
  17.  
  18.     row = row / 3 * 3;
  19.     col = col / 3 * 3;
  20.  
  21.     for (i = row; i < row + 3; i++)
  22.         for (j = col; j < col + 3; j++)
  23.             used |= 1 << (x[i * 9 + j] - 1);
  24.  
  25.     for (x[pos] = 1; x[pos] <= 9; x[pos]++, used >>= 1)
  26.         if (!(used & 1) && trycell(x, pos + 1))
  27.             return 1;
  28.     x[pos] = 0;
  29.     return 0;
  30. }

Si pudieran aclararme como funciona mas o menos este código

Saludos kutcher