横竖斜一条直线上不允许两个棋子
先把第一个棋子放好(main方法中的循环)
从第二个开始递归
public class Queen8 {
public static void main(String[] args) {
List<int[]> list = new ArrayList<>();
for (int i = 0; i < 8; i++) {
int[] array = new int[8];
array[0] = i;
loop(2, array, list);
}
System.out.println(list.size());
list.forEach(o -> {
System.out.println(Arrays.toString(o));
});
}
/**
* @param number 第几个皇后
* @param array 解法
* @author 2021-01-23 9:28
*/
// 05726314
static void loop(int number, int[] array, List list) {
if (number == 9) {
list.add(Arrays.copyOf(array, 8));
return;
}
for (int i = 0; i < 8; i++) {
if (isOk(array, number, i)) {
array[number - 1] = i;
loop(number + 1, array, list);
}
}
}
static boolean isOk(int[] array, int number, int tempPosition) {
for (int i = 0; i < number - 1; i++) {
if (array[i] == tempPosition || Math.abs(array[i] - tempPosition) == Math
.abs(i + 1 - number)) {
return false;
}
}
return true;
}
}