Salinan kode adalah sebagai berikut:
impor java.util.calendar;
impor java.util.date;
matriks kelas publik {
matriks int pribadi [] [];
private long timeAfter = 0;
Private Long TimeBefore = 0;
matriks publik (int m [] []) {
matriks = int baru [9] [9];
untuk (int i = 0; i <9; i ++)
untuk (int j = 0; j <9; j ++)
matriks [i] [j] = m [i] [j];
this.timeBefore = calendar.getInstance (). getTimeInmillis ();
}
public void backtrack (int i, int j)
{
// mendaur ulang sumber daya memori sistem
System.gc ();
if (i == 8 && j> = 9)
{
this.timeAfter = calendar.getInstance (). getTimeInmillis ();
// Matriks keluaran yang berhasil
this.showmatrix ();
kembali;
}
if (j == 9) {j = 0;
if (matriks [i] [j] == 0)
{
// angkanya nol
untuk (int k = 1; k <= 9; k ++)
{
if (terikat (i, j, k))
{
matriks [i] [j] = k;
// memenuhi kondisinya, temukan kotak berikutnya
backtrack (i, j+1);
matriks [i] [j] = 0;
}
}
}kalau tidak
{
// Nomornya tidak nol, cari saja yang berikutnya
backtrack (i, j+1);
}
}
/**
* Tentukan apakah nomor yang akan diisi diduplikasi dengan kolom yang sama dan angka -angka di sembilan kisi yang sama
*/
private boolean terikat (int i, int j, int k) {
int m = i/3;
int n = j/3;
untuk (int p = 0; p <9; p ++)
{
if (k == matriks [i] [p])
{
mengembalikan false;
}
if (k == matriks [p] [j])
{
mengembalikan false;
}
if (k == matriks [3*m+p/3] [3*n+p%3])
{
mengembalikan false;
}
}
Kembali Benar;
}
/**
* Cetak waktu penyelesaian masalah
* @kembali
*/
Public Long Printtime ()
{
kembalikan this.timeAfter-this.timeebeFore;
}
/**
* Cetak matriks
*/
public void showmatrix ()
{
untuk (int i = 0; i <9; i ++)
{
untuk (int j = 0; j <9; j ++)
{
System.out.print (matriks [i] [j]+"");
}
System.out.println ();
}
System.out.println ();
System.out.println ("waktu pemecahan masalah:"+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,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
// Ini dikenal sebagai sudoku paling sulit di dunia
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}};
Matriks m = matriks baru (sudoku);
M.BackTrack (0, 0);
}
}