La copia del código es la siguiente:
import java.util.calendar;
import java.util.date;
Matriz de clase pública {
private int matrix [] [];
Privado Long Timotter = 0;
Privado largo tiempo de tiempo = 0;
Public Matrix (int m [] []) {
matriz = nuevo int [9] [9];
para (int i = 0; i <9; i ++)
para (int j = 0; j <9; j ++)
matriz [i] [j] = m [i] [j];
this.timebefore = calendar.getInstance (). getTimeInmillis ();
}
Public void backtrack (int i, int j)
{
// Reciclar recursos de memoria del sistema
System.gc ();
if (i == 8 && j> = 9)
{
this.timerfter = calendar.getInstance (). getTimeInmillis ();
// matriz de salida exitosa
this.showmatrix ();
devolver;
}
if (j == 9) {j = 0;
if (matrix [i] [j] == 0)
{
// El número es cero
para (int k = 1; k <= 9; k ++)
{
if (Bound (i, j, k))
{
matriz [i] [j] = k;
// cumplir con las condiciones, encontrar el siguiente cuadrado
Backtrack (i, j+1);
matriz [i] [j] = 0;
}
}
}demás
{
// El número no es cero, solo busque el siguiente
Backtrack (i, j+1);
}
}
/**
* Determine si el número que se completará se duplican con la misma columna y los números en la misma cuadrícula de nueve
*/
Boolean Boolean privado (int i, int j, int k) {
int m = i/3;
int n = j/3;
para (int p = 0; p <9; p ++)
{
if (k == matriz [i] [p])
{
devolver falso;
}
if (k == matriz [p] [j])
{
devolver falso;
}
if (k == matriz [3*m+p/3] [3*n+p%3])
{
devolver falso;
}
}
devolver verdadero;
}
/**
* Imprima el tiempo de resolución de problemas
* @devolver
*/
Public Long Printtime ()
{
Devuelve esto.
}
/**
* Matriz de impresión
*/
Public void showMatrix ()
{
para (int i = 0; i <9; i ++)
{
para (int j = 0; j <9; j ++)
{
System.out.print (matriz [i] [j]+"");
}
System.out.println ();
}
System.out.println ();
System.out.println ("Tiempo de resolución de problemas:"+printtime ()+"ms");
System.out.println ();
}
public static void main (string [] args) {
int matrix [] [] = {
{3,0,6,0,5,7,0,0,0},
{7,9,0,0,2,4,0,0,0},
{0,5,0,6,0,0,9,7,4},
{8,0,1,0,0,9,0,0,0},
{0,2,0,3,0,8,0,0,7},
{4,0,0,0,6,0,5,0,0},
{0,0,4,0,3,6,0,5,0},
{2,0,3,7,0,5,0,0,1},
{0,0,7,4,1,0,6,0,0}};
int ma1 [] [] = {
{0,3,0,0,0,5,0,6,0},
{0,1,0,0,0,3,0,8,0},
{0,4,0,0,0,0,0,0,0,0,0,7},
{0,0,7,0,2,4,0,0,0},
{5,0,0,0,9,0,0,0,0,0},
{0,8,0,3,0,0,5,0,0},
{0,0,0,8,0,0,0,0,0,0},
{0,0,9,0,0,0,0,0,7,3},
{0,5,0,9,0,0,0,0,0,2}};
int ma2 [] [] = {
{0,0,0,0,8,4,0,0,0}, // 8
{0,0,0,2,0,3,0,8,0},
{8,3,0,9,0,0,0,5,0},
{0,5,3,0,9,0,7,0,0},
{0,0,0,6,3,7,0,4,5}, // 7
{0,7,0,5,0,0,0,0,0,0},
{0,0,6,8,0,0,0,0,0,0},
{3,0,0,0,2,9,0,0,0},
{2,0,9,3,0,0,0,0,1}}; // 3
// Se conoce como el más difícil de Sudoku del mundo
int [] [] sudoku = {
{8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
{0, 0, 3, 6, 0, 0, 0, 0, 0, 0, 0},
{0, 7, 0, 0, 9, 0, 2, 0, 0},
{0, 5, 0, 0, 0, 0, 7, 0, 0, 0},
{0, 0, 0, 0, 4, 5, 7, 0, 0},
{0, 0, 0, 1, 0, 6, 0, 3, 0},
{0, 0, 1, 0, 0, 0, 0, 6, 8},
{0, 0, 8, 5, 0, 0, 0, 1, 0},
{0, 9, 0, 0, 0, 0, 4, 0, 0}};
Matriz m = nueva matriz (sudoku);
M. Backtrack (0, 0);
}
}