面试题 08.12. 八皇后

本文介绍了一种解决N皇后问题的算法实现,该问题要求在N×N的棋盘上放置N个皇后,使得任意两个皇后不在同一行、列及对角线上。通过递归回溯的方法寻找所有可行的摆放方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计一种算法,打印 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;
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值