需求
思路分析
代码实现
package com.h.递归.八皇后回溯;
import java.util.ArrayList;
public class Test {
//存放所有结果
public static ArrayList<Integer[]> checkerBoards = new ArrayList<>();
//棋盘
static int[] array = new int[8];
//打印棋盘
private static void soutCheckerboard(int[] checkerboard){
for (int i : checkerboard) {
System.out.print(i+" ");
}
System.out.println("");
}
//检测是否跟前面摆放的皇后冲突
public static boolean isConflict(int n){
for (int i = 0; i < n; i++) {
//如果他们在同一列 , 或者在同一斜线 就返回 false
if(array[i] == array[n] || Math.abs(n-i) == Math.abs(array[n] - array[i])){
return false;
}
}
return true;
}
//运行
public static void run(int n){
//放完退出
if (n == 8){
soutCheckerboard(array);
return;
}
for (int i = 0; i < 8; i++) {
array[n] = i;
/*
判断是否与上一个皇后冲突
不冲突: 开始放置下一个皇后
冲突: 继续for循环 , 将皇后放置下一个位置
*/
if (isConflict(n)) {
run(n+1);
}
}
};
public static void main(String[] args) {
Test test = new Test();
test.run(0);
}
}