Кода -копия выглядит следующим образом:
импортировать java.util.calendar;
импортировать java.util.date;
Матрица открытого класса {
частная матрица int [] [];
Частный длинный Timefter = 0;
Приватный долгое время до = 0;
Публичная матрица (int m [] []) {
matrix = new Int [9] [9];
для (int i = 0; i <9; i ++)
для (int j = 0; j <9; j ++)
Матрица [i] [j] = m [i] [j];
this.
}
Public Void Backtrack (int i, int j)
{
// переработка ресурсов памяти системы
System.gc ();
if (i == 8 && j> = 9)
{
this.TimeAfter = calendar.getInstance (). getTimeInmillis ();
// Успешная выходная матрица
this.showmatrix ();
возвращаться;
}
if (j == 9) {j = 0;
if (matrix [i] [j] == 0)
{
// номер нулевой
для (int k = 1; k <= 9; k ++)
{
if (bound (i, j, k))
{
Матрица [i] [j] = k;
// Встречайте условия, найдите следующий квадрат
Backtrack (i, J+1);
Матрица [i] [j] = 0;
}
}
}еще
{
// номер не нуль, просто ищите следующий
Backtrack (i, J+1);
}
}
/**
* Определите, является ли число, которое нужно заполнить, дублируется с тем же столбцом и числами в той же девяти сетке
*/
частная логическая связь (int i, int j, int k) {
int m = i/3;
int n = j/3;
для (int p = 0; p <9; p ++)
{
if (k == matrix [i] [p])
{
вернуть ложь;
}
if (k == Матрица [p] [j])
{
вернуть ложь;
}
if (k == Матрица [3*m+p/3] [3*n+p%3])
{
вернуть ложь;
}
}
вернуть истину;
}
/**
* Распечатайте время решения проблем
* @возвращаться
*/
Public Long Printime ()
{
вернуть это.
}
/**
* Матрица печати
*/
public void showmatrix ()
{
для (int i = 0; i <9; i ++)
{
для (int j = 0; j <9; j ++)
{
System.out.print (matrix [i] [j]+"");
}
System.out.println ();
}
System.out.println ();
System.out.println («Время решения проблем:»+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,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,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,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
// он известен как самый сложный судоку в мире
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}};
Матрица M = новая матрица (Sudoku);
m.backtrack (0, 0);
}
}