Sudoku, algoritmo de retroceso

Método de retroceso de Sudoku

int xx = (pos.getX() / 3) * 3;          
int yy = (pos.getY() / 3) * 3;           
for (int y = 0; y < 3; y++) {              
    for (int x = 0; x < 3; x++) {               
        if ((xx + x != pos.getX()) && (yy + y != pos.getY())) {            
            possible[work[xx + x][yy + y]] = false;           

donde x e y =

private byte x;
private byte y;

¿Alguien podría explicar por qué dividimos por tres y multiplicamos por tres?

(pos.getY() / 3) * 3;                      
(pos.getX() / 3) * 3;

preguntado el 22 de mayo de 12 a las 10:05

2 Respuestas

La división es una división de enteros, por lo que eliminará el resto. Hacer la división entera seguida de una multiplicación te dará el índice de la primera celda del bloque correcto de 3x3.

P.ej

pos    0    1    2    3    4    5    6    7    8
/3     0    0    0    1    1    1    2    2    2
*3     0    0    0    3    3    3    6    6    6

contestado el 22 de mayo de 12 a las 11:05

Porque queremos un múltiplo de 3. Queremos el mayor múltiplo de 3 que sea menor que pos.getX(). Corresponde a la celda superior izquierda en el cuadro actual de 3x3.

Recuerda que X/3 debe ser un número entero, por lo que (X/3)*3 puede no ser igual a X.

contestado el 22 de mayo de 12 a las 10:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.