java实现八皇后问题
java实现八皇后问题
代码实现
public class Demo {
int max = 8;
int[] arr = new int[max];
static int count = 0;
public static void main(String[] args) {
Demo demo = new Demo();
demo.check(0);
System.out.printf("一共有%d种解法", count);
}
// 放置皇后
private void check(int n) {
// 放置结束
if (n == max) {
print();
return;
}
// 依次放入皇后
for (int i = 0; i < max; ++i) {
// 先放到每行的第一列
arr[n] = i;
// 判断是否冲突
// true是不冲突
if (judge(n)) {
// 不冲突就放下一列
check(n + 1);
}
}
}
// 检测皇后是否互相冲突
private boolean judge(int n) {
for (int i = 0; i < n; i++) {
// 判断是否在同一列
if (arr[i] == arr[n]) {
return false;
}
// 判断是否在斜线45°上
// 因为规定下标为行,值为列
if (Math.abs(n - i) == Math.abs(arr[n] - arr[i])) {
return false;
}
}
return true;
}
// 打印棋盘
private void print() {
++count;
for (int i = 0; i < arr.length; i++) {
System.out.print(arr[i] + "\t");
}
System.out.println();
System.out.println("==============================");
}
}