八皇后问题
递归回溯解决八皇后问题
import java.util.Arrays;
public class eightQueue {
private static int max =8; //皇后数量
private static int [] arr = new int[max];
//数组储存皇后位,数组索引下标代表第几个皇后和第几行,数组值代表第几列
private int a=0; //记录回溯次数
public static void main(String[] args) {
eightQueue m=new eightQueue();
m.init();
m.check(0);
System.out.println(m.a+" "+m.x);
}
//初始化皇后数组
private void init(){
for(int i=0;i<max;i++){
arr[i]=-999;
}
}
//检查放置的第n个皇后,如果是第max个,则说明找到一种放置方法,直接回溯
private void check(int n){
if(n==max){
a++;
print();
return;
}
for(int i=0;i<max;i++){
arr[n]=i;
if(judge(n)) {
check(n+1);
}
}
}
//判断所放置位置会不会冲突
private boolean judge(int n){
//从最前开始,判断前面放置的皇后会不会和第n个要放置的产生冲突
for(int i=0;i<n;i++){
if(arr[i]==arr[n]||Math.abs(i-n)==Math.abs(arr[i]-arr[n])){
return false;
}
}
return true;
}
private void print(){
System.out.print(Arrays.toString(arr));
System.out.println();
}
}