การคัดลอกรหัสมีดังนี้:
นำเข้า Java.util.Calendar;
นำเข้า java.util.date;
เมทริกซ์ระดับสาธารณะ {
เมทริกซ์ int ส่วนตัว [] [];
Timerfter ส่วนตัวส่วนตัว = 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.timebefore = calendar.getInstance (). getTimeInmillis ();
-
Public Void Backtrack (int i, int j)
-
// รีไซเคิลทรัพยากรหน่วยความจำของระบบ
System.gc ();
ถ้า (i == 8 && j> = 9)
-
this.timfter = 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 == เมทริกซ์ [i] [p])
-
กลับเท็จ;
-
if (k == เมทริกซ์ [p] [j])
-
กลับเท็จ;
-
if (k == เมทริกซ์ [3*m+p/3] [3*n+p%3])
-
กลับเท็จ;
-
-
กลับมาจริง;
-
-
* พิมพ์เวลาแก้ปัญหา
* @กลับ
-
การพิมพ์ระยะยาวสาธารณะ ()
-
ส่งคืนสิ่งนี้ timfter-this.timebefore;
-
-
* พิมพ์เมทริกซ์
-
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 ();
-
โมฆะคงที่สาธารณะหลัก (สตริง [] 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
// เป็นที่รู้จักกันว่าเป็น sudoku ที่ยากที่สุดในโลก
int [] [] sudoku = {
{8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
{0, 0, 3, 6, 0, 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, 0, 4, 5, 7, 0, 0}
{0, 0, 0, 1, 0, 6, 0, 3, 0}
{0, 0, 1, 0, 0, 0, 0, 0, 6, 8}
{0, 0, 8, 5, 0, 0, 0, 0, 1, 0}
{0, 9, 0, 0, 0, 0, 4, 0, 0}};
เมทริกซ์ M = เมทริกซ์ใหม่ (Sudoku);
M.Backtrack (0, 0);
-
-