Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: kutcher en 4 Noviembre 2014, 18:48 pm



Título: Algoritmo para resolver sudoku incomprensible
Publicado por: kutcher en 4 Noviembre 2014, 18:48 pm
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
  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


Título: Re: Algoritmo para resolver sudoku incomprensible
Publicado por: _Enko en 5 Noviembre 2014, 20:48 pm
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.