نسخة الكود كما يلي:
استيراد java.util.calendar ؛
استيراد java.util.date ؛
مصفوفة الفئة العامة {
Private Int Matrix [] [] ؛
وقت طويل خاص = 0 ؛
وقت طويل privatebefore = 0 ؛
المصفوفة العامة (int m []) {
Matrix = new int [9] [9] ؛
لـ (int i = 0 ؛ i <9 ؛ i ++)
لـ (int j = 0 ؛ j <9 ؛ j ++)
Matrix [i] [j] = m [i] [j] ؛
this.timeBefore = calendar.getInstance (). getTimeInMillis () ؛
}
Backtrack public void (int i ، int j)
{
// إعادة تدوير موارد الذاكرة
System.gc () ؛
إذا (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) ؛
Matrix [i] [j] = 0 ؛
}
}
}آخر
{
// الرقم ليس صفرًا ، فقط ابحث عن الرقم التالي
backtrack (i ، j+1) ؛
}
}
/**
* تحديد ما إذا كان الرقم المراد ملؤه يتم تكراره بنفس العمود والأرقام في نفس الشبكة التسعة
*/
BOOLEAN BOOND (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 == matrix [p] [j])
{
العودة كاذبة
}
if (k == matrix [3*m+p/3] [3*n+p ٪ 3])
{
العودة كاذبة
}
}
العودة صحيح.
}
/**
* طباعة وقت حل المشكلة
* @يعود
*/
الطباعة الطويلة العامة ()
{
إرجاع هذا.
}
/**
* المصفوفة طباعة
*/
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} ،
{7،9،0،0،2،4،0،0} ،
{0،5،0،6،0،9،7،4} ،
{8،0،1،0،9،0،0،0} ،
{0،2،0،3،0،8،0،7} ،
{4،0،0،0،0،5،0،0} ،
{0،0،4،0،3،0،5،0} ،
{2،0،3،7،0،5،0،1} ،
{0،0،7،4،1،0،6،0،0}} ؛
int MA1 [] [] = {
{0،3،0،0،5،0،6،0} ،
{0،1،0،0،3،0،8،0} ،
{0،4،0،0،0،0،0،0،7} ،
{0،0،7،0،2،4،0،0} ،
{5،0،0،9،0،0،0،0} ،
{0،8،0،3،0،5،0،0} ،
{0،0،0،8،0،0،0،0،0} ،
{0،0،9،0،0،0،0،7،3} ،
{0،5،0،9،0،0،0،0،2}} ؛
int ma2 [] [] = {
{0،0،0،0،8،4،0،0،0} ، // 8
{0،0،0،2،0،3،0،0،0} ،
{8،3،0،9،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،6،8،0،0،0،0،0} ،
{3،0،0،0،2،9،0،0} ،
{2،0،9،3،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 = مصفوفة جديدة (سودوكو) ؛
M.BackTrack (0 ، 0) ؛
}
}