子集树解法:
package HuiSu;
public class Nhou2 {
private int max = 5;// 现在假设是5个皇后
private int[] array = new int[max]; //用来保存结果,第一个皇后放在array[0]
public static void main(String[] args) {
new Nhou2().check(0);
}
private void check(int n) {
if (n == max) {// 因为n代表顺序,到了max就绝对全部考虑完了
print();
return;
}
//从第一列开始放值
for (int i = 0; i < max; i++) {
array[n] = i;
if (judge(n)){
check(n+1);
}
}
}
private boolean judge(int n) {
for (int i = 0; i < n; i++) {
// 不能同列、同斜线
if ( (Math.abs(n - i) == Math.abs(array[n] - array[i])) || array[n] == array[i]) {
return false;
}
}
return true;
}
int k=0;
private void print() {
++k;
System.out.print("第"+k+"个:");
for (int i = 0; i < array.length; i++) {
System.out.print(array[i] + 1 + " ");// 打印出列数从1开始
}
System.out.println();
}
}
结果展示: