public class Queue8 {
int max = 8;
int count = 1;
// 定义数组,保存皇后放置位置的结果,比如arr = {0,4,7,5,2,6,1,3}
int[] arr = new int[max];
public static void main(String[] args) {
Queue8 queue8 = new Queue8();
for(int i=0; i<queue8.max; i++) {
queue8.arr[0] = i;
queue8.check(1);
}
}
private void check(int n){
if(n == max){
print();
count++;
return;
}
// 依次放入皇后,并判断是否冲突
for(int i=0; i<max; i++){
arr[n] = i;
if(judge(n)){ // 不冲突
check(n+1);
}
}
}
// 当我们放置第n个皇后,就去检测该皇后是否和前面已经摆放的皇后冲突
private boolean judge(int n){
for (int i = 0; i < n; i++) {
// arr[i] == arr[n]表示在同一列, Math.abs(n-i) == Math.abs(arr[n]-arr[i]))表示同一斜线
if(arr[i] == arr[n] || (Math.abs(n-i) == Math.abs(arr[n]-arr[i]))){
return false;
}
}
return true;
}
private void print(){
System.out.printf("count="+count +" ");
for (int i = 0; i < 8; i++) {
//System.out.print("count="+count + " "+arr[i] + " ");
System.out.print(arr[i] + " ");
}
System.out.println();
}
}