public class tai {
int[]x=new int[9];
int[][]a=new int[9][9];
public int check(int i){ /**递归*/
for(int j=1;j<=8;j++){
if(a[j]==0){
x=j;
a_add(i,j);
if(i<8&&check(i+1)==0){
a_subtract(i,j);
x=0;
continue;
}
if(i==8&&x!=0){
a_subtract(i,j);
p();
x=0;
continue;
}
return x;
}
}
return 0;
}
public void p(){ /**打印*/
for(int i=1;i<=8;i++){
System.out.print(x);
}
System.out.println();
}
public void a_add(int i,int j){ /**标记*/
for(int m=i;m<=8;m++)
for(int n=1;n<=8;n++){
if(n==j)a[m][n]++;
if(Math.abs(m-i)==Math.abs(n-j))a[m][n]++;
}
}
public void a_subtract(int i,int j){ /**去标记*/
for(int m=i;m<=8;m++)
for(int n=1;n<=8;n++){
if(n==j)a[m][n]--;
if(Math.abs(m-i)==Math.abs(n-j))a[m][n]--;
}
}
public static void main(String[] args) {
// TODO 自动生成方法存根
tai t=new tai();
t.check(1);
}
}
/**
* 需要注意的是:添加标记时,不能简单的用类似a[j]=1的标记方法,
* 因为可能存在不同的两个皇后,它们对同一个位置造成了威胁,如果所
* 用的标记方法不合理,可能会使不该去标记的位置失去标记。(表达不甚
* 准确,仔细思考,定能明白其中缘由。)
* */