Die Codekopie lautet wie folgt:
Import Java.util.Calendar;
import Java.util.date;
öffentliche Klassenmatrix {
private int matrix [] [];
privat langes Timeagier = 0;
private langzeitbeforde = 0;
öffentliche Matrix (int m [] [] []) {
matrix = new int [9] [9];
für (int i = 0; i <9; i ++)
für (int j = 0; j <9; j ++)
matrix [i] [j] = m [i] [j];
thatTimeBefore = calendar.getInstance (). GetTimeInmillis ();
}
öffentliche Leere Backtrack (int i, int j)
{
// Systemspeicherressourcen recyceln
System.gc ();
if (i == 8 && j> = 9)
{
that time date = calendar.getInstance (). GetTimeInmillis ();
// erfolgreiche Ausgangsmatrix
this.showmatrix ();
zurückkehren;
}
if (j == 9) {j = 0;
if (matrix [i] [j] == 0)
{
// Die Zahl ist Null
für (int k = 1; k <= 9; k ++)
{
if (gebunden (i, j, k))
{
Matrix [i] [j] = k;
// Erfüllen Sie die Bedingungen und finden Sie den nächsten Platz
Backtrack (i, j+1);
Matrix [i] [j] = 0;
}
}
}anders
{
// Die Zahl ist nicht Null. Suchen Sie einfach nach dem nächsten
Backtrack (i, j+1);
}
}
/**
* Bestimmen Sie, ob die zu ausgefüllte Nummer mit derselben Spalte und den Zahlen in demselben neun Gitter dupliziert wird
*/
private boolean gebunden (int i, int j, int k) {
int m = i/3;
int n = j/3;
für (int p = 0; p <9; p ++)
{
if (k == Matrix [i] [p])
{
false zurückgeben;
}
if (k == matrix [p] [j])
{
false zurückgeben;
}
if (k == Matrix [3*m+p/3] [3*n+p%3])
{
false zurückgeben;
}
}
zurückkehren;
}
/**
* Drucken Sie die Problemlösungszeit
* @zurückkehren
*/
öffentliche lange Druckzeit ()
{
kehren Sie dies zurück.
}
/**
* Druckenmatrix
*/
öffentliche void showmatrix ()
{
für (int i = 0; i <9; i ++)
{
für (int j = 0; j <9; j ++)
{
System.out.print (Matrix [i] [j]+"");
}
System.out.println ();
}
System.out.println ();
System.out.println ("Problemlösungszeit:"+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,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
// Es ist als der schwierigste Sudoku der Welt bekannt
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}};
Matrix M = neue Matrix (Sudoku);
M.BackTrack (0, 0);
}
}