八皇后问题
//定义变量,正对角线pDiagonal,反对角线nDiagonal,列column,用来记录该列 ,对角线 是否可用
int[] pDiagonal = new int[15];
int[] cDiagonal = new int[15];
int[] column = new int[8];
int[][] result = new int[8][8];
//j是当前的行数
public void queenResolve(int i){
if(i == 7){//n从0 开始
for(int[] k : result ){
for(int p : k)
System.out.print(p+" ");
System.out.println();
}
}
else{
//看当前行的每一个列位置是否可用
for(int j = 0,j<8;j++){
if(column[j]==0&&pDiagonal[i+j]==0&&nDiagonal[j-i+7]){
//放皇后
result[i][j] = 1 ;
//将列和对角线上的位置设为不可用
column[j]=1;
pDiagonal[i+j]=1;
nDiagonal[i+j]=1;
//放完这个位置接着放下一行
queenResolve(i+1);
//失败了,回溯
result[i][j] = 0;
column[j]=0;
pDiagonal[i+j]=0;
nDiagonal[i+j]=0;
}//end if
}//end for
}end else
}