코드 사본은 다음과 같습니다.
java.util.calendar 가져 오기;
import java.util.date;
공개 클래스 매트릭스 {
개인 int 매트릭스 [] [];
개인 장수 = 0;
사적인 오랜 시간 전; 0;
public matrix (int m [] []) {
매트릭스 = 새로운 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 ();
}
공개 void backtrack (int i, int j)
{
// 시스템 메모리 리소스를 재활용합니다
System.gc ();
if (i == 8 && j> = 9)
{
this.mate attime = calendar.getInstance (). getTimeInmillis ();
// 성공적인 출력 매트릭스
this.showmatrix ();
반품;
}
if (j == 9) {j = 0;}
if (matrix [i] [j] == 0)
{
// 숫자는 0입니다
for (int k = 1; k <= 9; k ++)
{
if (bound (i, j, k))
{
매트릭스 [i] [j] = k;
// 조건을 충족하고 다음 정사각형을 찾으십시오
백 트랙 (i, j+1);
매트릭스 [i] [J] = 0;
}
}
}또 다른
{
// 숫자는 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 == 매트릭스 [i] [p])
{
거짓을 반환합니다.
}
if (k == 매트릭스 [p] [j])
{
거짓을 반환합니다.
}
if (k == 매트릭스 [3*m+p/3] [3*n+p%3])
{
거짓을 반환합니다.
}
}
진실을 반환하십시오.
}
/**
* 문제 해결 시간을 인쇄하십시오
* @반품
*/
공개 긴 인쇄물 ()
{
이후에 반환하십시오.
}
/**
* 인쇄 매트릭스
*/
공개 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,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,0,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,0,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,1}}}; // 3
// 세계에서 가장 어려운 스도쿠로 알려져 있습니다.
int [] [] sudoku = {
{8, 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, 4, 5, 7, 0, 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);
}
}