import java.util.*;
// 冲刺058
class Solution {
public List<List<String>> solveNQueens(int n) {
List<List<String>> ans = new ArrayList<>();
List<List<Integer>> all = new ArrayList<>();
getAll(n, new boolean[n], new LinkedList<>(), all);
char[] temp = new char[n];
Arrays.fill(temp, '.');
for (List<Integer> integers : all) {
// n个点的坐标为(i, integers.get(i))
boolean flag = true;
// 所有点两两校验
for (int i = 0; i < n && flag; i++) {
int y1 = integers.get(i);
for (int j = i + 1; j < n; j++) {
int x = j - i;
int y = integers.get(j) - y1;
if (Math.abs(x) == Math.abs(y)) {
flag = false;
break;
}
}
}
if (flag) {
List<String> now = new ArrayList<>();
for (int i = 0; i < n; i++) {
temp[integers.get(i)] = 'Q';
now.add(new String(temp));
temp[integers.get(i)] = '.';
}
ans.add(now);
}
}
return ans;
}
// 获取全排列
void getAll(int n, boolean[] use, Deque<Integer> now, List<List<Integer>> ans) {
if (now.size() == n) {
ans.add(new ArrayList<>(now));
return;
}
for (int i = 0; i < n; i++) {
if (!use[i]) {
use[i] = true;
now.add(i);
getAll(n, use, now, ans);
now.removeLast();
use[i] = false;
}
}
}
}
Leetcode_51_N皇后_搜索
解决N皇后问题的算法实现
最新推荐文章于 2024-07-29 17:02:43 发布
该博客介绍了如何使用Java实现N皇后问题的解决方案。通过全排列策略,找到所有可能的皇后放置方式,同时检查每一对皇后是否在同一斜线上,确保没有冲突。最终输出所有合法的解决方案。

223

被折叠的 条评论
为什么被折叠?



