我这里有问题。我没有得到完美的输出。以下是我为准备数独而编写的代码。即使我知道它的原因,因为它无法创建任何新的唯一数字,它正在打印默认值 0。我知道我错过了一些我想不到的东西。任何人都可以提出解决方案吗?提前致谢。
public class FinalSudoku
{
int a[][]=new int[9][9];
public void initialize1()
{
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
a[i][j]=0;
}
}
}
protected boolean detectRow( int row, int num )
{
for( int col = 0; col < 9; col++ )
if( a[row][col] == num )
return false;
return true ;
}
protected boolean detectCol( int col, int num )
{
for( int row = 0; row < 9; row++ )
if( a[row][col] == num )
return false ;
return true ;
}
protected boolean detectBox( int row, int col, int num )
{
row = (row / 3) * 3 ;
col = (col / 3) * 3 ;
for( int r = 0; r < 3; r++ )
for( int c = 0; c < 3; c++ )
if( a[row+r][col+c] == num )
return false ;
return true ;
}
public void solve( int row, int col ) throws Exception
{
if( row > 8 )
throw new Exception( "Solution found" ) ;
if( a[row][col] != 0 )
next( row, col ) ;
else
{
for( int num = 1; num < 10; num++ )
{
if(detectRow(row,num) && detectCol(col,num) && detectBox(row,col,num) )
{
a[row][col] = num ;
next(row, col) ;
}
}
}
}
public void display()
{
for(int i=0;i<9;i++)
{
for(int j=0;j<9;j++)
{
System.out.print(a[i][j]+" ");
}
System.out.println();
}
}
public void next( int row, int col ) throws Exception
{
if( col < 8 )
solve( row, col + 1 ) ;
else
solve( row + 1, 0 ) ;
}
public static void main(String[] args) throws Exception
{
FinalSudoku fs = new FinalSudoku();
fs.initialize1();
fs.solve(0,0);
fs.display();
}
}
此代码的输出:
1 2 3 4 5 6 7 8 9
4 5 6 7 8 9 3 2 1
7 8 9 1 2 3 4 5 6
2 1 4 3 6 5 8 9 7
3 6 7 2 9 8 1 4 5
5 9 8 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0
0 0 0 0 0