凌晨忽然想起八皇后问题,就想写一下
递归逻辑倒是很简单,问题出在了 判断八皇后是否在一条斜线上,从2点多到4点都没想出 有什么方便的解法,睡醒后,想起很久以前学习数据结构时,当时讲师的判断方法,搬运了过来,果然一次就得出92解,下面就贴上全部代码
package com.queen;
import java.util.ArrayList;
public class Queen8 {
public static int[] que = new int[8];
public static ArrayList<int[]> list = new ArrayList<>();
public static void main(String[] args) {
queen(0);
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < 8; j++) {
System.out.print(list.get(i)[j] + " ,");
}
System.out.println();
}
System.out.println("一共有 " + list.size() + " 种解法~");
}
public static void queen(int num) {
if (num > 7) {
int[] newInt = new int[8];
for (int i = 0; i < 8; i++) {
newInt[i] = que[i];
}
list.add(newInt);
return;
}
for (int i = 0; i < 8; i++) {
if (isTrue(num, i)) {
que[num] = i;
queen(num + 1);
}
}
}
public static boolean isTrue(int num, int i) {
for (int j = 0; j < num; j++) {
if (i == que[j]) {
return false;
}
}
for (int j = 0; j < num; j++) {
if (juedui(num, j) == juedui(i, que[j])) {
return false;
}
}
return true;
}
public static int juedui(int a, int b) {
if (a < b) {
return b - a;
}
return a - b;
}
}