看到了一种非常简单容易理解的N皇后问题实现思路
import java.util.*;
public class Main{
//N皇后问题
// 输入:正整数N
// 输出:输出所有的排列组合
static int N = 0;
static int[] pos; // 第i个皇后所在的位置
static List<List<String>> res = new ArrayList();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
N = sc.nextInt();
pos = new int[N];
dfs(0);
for (List list : res){
System.err.println(list.toString());
}
}
// n : 当前放置的第n行的皇后
private static void dfs(int n) {
if(n==N){
List<String> temp = new ArrayList<>();
for (int p = 0; p< pos.length; p++ ){
int cur = pos[p];
char[] ch = new char[N];
Arrays.fill(ch, '.');
ch[cur] = 'Q';
temp.add(String.valueOf(ch));
}
res.add(temp);
return;
}
for(int j = 0; j<N;j++ ){
if(check(pos, n, j)){
pos[n] = j;
dfs(n+1);
pos[n] = 0;
}
}
}
//判断能够放将第i个皇后能否放在第j列
private static boolean check(int[] pos, int i, int j) {
for(int k = 0; k<i; k++){
// k: 第k行
// pos[k]: 第pos[k]列
if(pos[k]==j || Math.abs( 1.0 * (i-k)/(j-pos[k])) == 1.0){
return false;
}
}
return true;
}
}
参考资料
[1]: https://www.bilibili.com/video/BV1bK4y1n7iq?seid=10696117544410860320