题目描述:可进行百度
public class NQueens {
public static int num1(int n) {
if(n < 1) return 0;
int[] record = new int[n]; //record[i] ->i行的皇后,放在了第几列
return process1(0, record, n);
}
//目前来到了第i行
//record[0....i-1]表示之前的行放了皇后的位置
//n表示整体有多少行
//返回值是指合理的摆法有多少种
private static int process1(int i, int[] record, int n) {
if(i == n) return 1;
int res = 0;
for(int j = 0; j < n; j++) {
//当前i行的皇后,放在了j列,判断是否会和之前的(0..i-1)行冲突
//如果是 则认为无效
if(isVaild(record, i, j)) {
record[i] = j;
res += process1(i + 1, record, n);
}
}
return res;
}
//i j表示要放的行和列 k从0开始
private static boolean isVaild(int[] record, int i, int j) {
for(int k = 0; k < i; k++) {
if(record[k] == j || Math.abs(record[k] - j) == Math.abs(i - k)) {
return false;
}
}
return true;
}
public static void main(String[] args) {
System.out.println(num1(8));
}
}