采用了 递归和剪枝,一旦出现不符合要求的位置,立即停止搜索,节约了资源和时间。
con()函数用来判断是否符合要求。
结果显示共92种放置策略。
public class Queen {
static int m=0;
static int array[]=new int[8];
static boolean con(int a,int b,int c,int d) {
return ((a+b-c-d)!=0)&&((a-b+d-c)!=0&&(a!=c)&&(b!=d));
}
static void compare(int array[],int row) {
//row为待加入和行
//待加入的行要和前面的进行con计算
int n=0;
for(int line=0;line<8;line++) {
n=0;
for(int i=0;i<row;i++) {
if(con(row,line,i,array[i]) ){
n=n+1;
}else {
break;
}
}
if(n==row) {
array[row]=line;
//System.out.println("row: "+row+" array[row]:"+line);
if(row+1<8) {
compare(array,row+1);
}else {
for(int i=0;i<8;i++) {
System.out.print(array[i]+" ");
}
System.out.println(++m);
}
}
}
}
public static void main(String args[]) {
for(int i=0;i<8;i++) {
array[0]=i;
compare(array,1);
}
}
}