コードコピーは次のとおりです。
java.util.calendarをインポートします。
Import Java.util.date;
パブリッククラスマトリックス{
private int matrix [] [];
プライベートロングタイミー= 0;
プライベート長い時間前= 0;
パブリックマトリックス(int m [] []){
matrix = new int [9] [9];
for(int i = 0; i <9; i ++)
for(int j = 0; j <9; j ++)
マトリックス[i] [j] = m [i] [j];
this.timebefore = calendar.getInstance()。getTimeInmillis();
}
パブリックボイドバックトラック(int i、int j)
{
//システムメモリリソースをリサイクルします
System.gc();
if(i == 8 && j> = 9)
{
this.timefter = calendar.getInstance()。getTimeInmillis();
//成功した出力マトリックス
this.showmatrix();
戻る;
}
if(j == 9){j = 0;}
if(matrix [i] [j] == 0)
{
//数値はゼロです
for(int k = 1; k <= 9; k ++)
{
if(bound(i、j、k))
{
マトリックス[i] [j] = k;
//条件を満たし、次の広場を見つけます
バックトラック(i、j+1);
マトリックス[i] [j] = 0;
}
}
}それ以外
{
//番号はゼロではありません。次の数字を探してください
バックトラック(i、j+1);
}
}
/**
*記入する数値が同じ列と同じ9グリッドの数字が複製されているかどうかを判断します
*/
プライベートブールバウンド(Int I、Int J、Int K){
int m = i/3;
int n = j/3;
for(int p = 0; p <9; p ++)
{
if(k == matrix [i] [p])
{
falseを返します。
}
if(k == matrix [p] [j])
{
falseを返します。
}
if(k == matrix [3*m+p/3] [3*n+p%3])
{
falseを返します。
}
}
trueを返します。
}
/**
*問題解決時間を印刷します
* @戻る
*/
public long printtime()
{
これを返します。
}
/**
*マトリックスを印刷します
*/
public void showmatrix()
{
for(int i = 0; i <9; i ++)
{
for(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}};
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,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,0,6,8,0,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);
}
}