public class MainFrame {
final static int N = 16;
static int list[][] = new int[N][N];
int step[] = new int[N];
public void Print()
{
for(int i=0; i<N; i++)
{
for(int j=0; j<N; j++)
System.out.print(list[i][j]+" ");
System.out.println();
}
}
public void NQuene()
{
for(int i=0; i<N; i++)
{
int j=0;
while(j<N)
{
if ( ValidateLocate(i,j,list) )
{
list[i][j] = 1;
step[i] = j;
break;
}
j++;
if( j==N )
{
i--;
j=step[i]+1;
for(int k=0; k<N; k++)
list[i][k]=0;
if(j==N)
{
i--;
j=step[i]+1;
for(int k=0; k<N; k++)
list[i][k]=0;
}
}
}
}
}
public static boolean ValidateLocate(int i, int j, int[][] l)
{
for(int m=0; m<N; m++)
{
if( list[m][j] == 1 )
return false;
}
for(int m=0; m<N; m++)
for(int n=0; n<N; n++)
{
if(list[m][n]==1)
{
if(Math.abs(i-m) == Math.abs(j-n))
return false;
}
}
return true;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
MainFrame mf = new MainFrame();
mf.NQuene();
mf.Print();
}
}
默认N=16,打印结果如下所示:
1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0
0 1 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 1 0 0 0
0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0
0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 1 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 1
0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0