设计一种算法,打印 N 皇后在 N × N 棋盘上的各种摆法,其中每个皇后都不同行、不同列,也不在对角线上。这里的“对角线”指的是所有的对角线,不只是平分整个棋盘的那两条对角线。
注意:本题相对原题做了扩展
示例:
输入:4
输出:[[".Q..","...Q","Q...","..Q."],["..Q.","Q...","...Q",".Q.."]]
解释: 4 皇后问题存在如下两个不同的解法。
[
[".Q..", // 解法 1
"...Q",
"Q...",
"..Q."],
["..Q.", // 解法 2
"Q...",
"...Q",
".Q.."]
]
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/eight-queens-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
/**
* @param {number} n
* @return {string[][]}
*/
var count = 0;
var res = [];
var result = [];
var solve = function (i, total) {
if (i === total) {
count++;
const temp = [];
for(let t=0;t<total;t++) {
const str = Array.from({length: total}).fill('.');
const resTemp = res[t];
str[resTemp[1]] = 'Q';
temp.push(str.join(''));
}
result.push(temp);
return;
}
for (let k = 0; k < total; k++) {
let flag = true;
for (let t = 0; t < res.length; t++) {
const exist = res[t];
if ((exist[1] === k) || (Math.abs(exist[0] - i) === Math.abs(exist[1] - k))) {
flag = false;
break;
}
}
if (flag) {
res.push([i, k]);
solve(i + 1, total);
res.pop();
}
}
};
var solveNQueens = function (n) {
count = 0;
result = [];
for (let i = 0; i < n; i++) {
res.push([0, i]);
solve(1, n);
res.pop();
}
return result;
};