Algoritmo para resolver sudoku incomprensible

Iniciado por kutcher, 4 Noviembre 2014, 18:48 PM

0 Miembros y 1 Visitante están viendo este tema.

kutcher

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 :

int trycell(int *x, int pos)
{
   int row = pos / 9;
   int col = pos % 9;
   int i, j, used = 0;

   if (pos == 81)
       return 1;
   if (x[pos])
       return trycell(x, pos + 1);

   for (i = 0; i < 9; i++)
       used |= 1 << (x[i * 9 + col] - 1);

   for (j = 0; j < 9; j++)
       used |= 1 << (x[row * 9 + j] - 1);

   row = row / 3 * 3;
   col = col / 3 * 3;

   for (i = row; i < row + 3; i++)
       for (j = col; j < col + 3; j++)
           used |= 1 << (x[i * 9 + j] - 1);

   for (x[pos] = 1; x[pos] <= 9; x[pos]++, used >>= 1)
       if (!(used & 1) && trycell(x, pos + 1))
           return 1;
   x[pos] = 0;
   return 0;
}


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

Saludos kutcher

_Enko

Mas que entender codigo de otros, podrias hacer el tuyo. No creo que sea tan complicado el sudoku.
Cada cuadrado  pequeño debe sumar 45 sin repetir ninguna cifra del 1 al 9.
Cada fila debe sumar 45 sin repetir ninguna cifra del 1 al 9.

No tiene mas misterio. Si cumple esas condiciones esta resuleto.