public class T
{
int[][] a = {
{0,0,8,0,0,0,4,7,0},
{0,2,0,3,0,0,0,0,9},
{0,0,9,2,6,0,0,3,0},
{0,0,0,0,3,0,0,0,8},
{3,0,0,7,0,1,0,0,4},
{5,0,0,0,2,0,0,0,0},
{0,4,0,0,5,3,8,0,0},
{8,0,0,0,0,6,0,4,0},
{0,6,3,0,0,0,5,0,0} };
/* {0,0,8,0,0,3,0,0,0},
{0,3,5,0,0,9,6,0,0},
{2,4,0,0,0,0,0,0,5},
{3,0,2,0,0,6,0,0,7},
{0,8,0,0,0,0,0,5,0},
{5,0,0,1,0,0,3,0,6},
{7,0,0,0,0,0,0,8,3},
{0,0,3,7,0,0,9,6,0},
{0,0,0,8,0,0,7,0,0} };*/
boolean checkRow(int[][] aa, int i, int j, int n)
{
for(int k=0; k
{
if(aa[i][k] == n ) return false;
}
return true;
}
boolean checkColumn(int[][] aa, int i, int j, int n)
{
for(int k=0; k
{
if(aa[k][j] == n ) return false;
}
return true;
}
boolean checkSquare(int[][] aa, int i, int j, int n)
{
int k1 = i / 3;
int k2 = j / 3;
k1 *= 3;
k2 *= 3;
for(int x=0; x
{
for(int y=0; y
{
if(aa[k1+x][k2+y] == n ) return false;
}
}
return true;
}
void print(int[][] aa)
{
for(int x=0; x
{
for(int y=0; y
{
System.out.print(" "+aa[x][y] ) ;
}
System.out.println();
}
System.out.println("=====================================" )
;
}
public static void main(String[] argv)
{
T t = new T();
int i = 0;
int j = 0;
int m = 1;
t.test(t.a,i,j,m);
}
void test(int[][] a, int i, int j, int m)
{
//System.out.println("i=" + i + " j=" +j + " m=" + m);
if( m > 9 ) return;
if( a[i][j] == 0 )
{
for(int x=m; x<=9; x++)
{
//System.out.println( "x=" + x);
if( checkRow(a,i,j,x) && checkColumn(a,i,j,x) &&
checkSquare(a,i,j,x) )
{
//System.out.println("" + x + " is tentatively accepted." ) ;
int[][] aa = new int[9][9];
for(int xx=0; xx
aa[i][j] = x;
if(j
{
test(aa,i,j+1,1);
}
else
{
if(i
{
test(aa,i+1,0,1);
}
else
{
print(aa);
}
}
}
}
//System.out.println("rewinding..." );
}
else
{
if(j
{
test(a,i,j+1,1);
}
else
{
if(i
{
test(a,i+1,0,1);
}
else
{
print(a);
}
}
}
}
}