• n皇后问题


    如果按列从左向右放置皇后,需要用三个数组记录之前已经用过的行,主对角线,次对角线。

    可以用状态压缩的方法简化问题。用三个数的二进制表示已经用过的行和两条对角线,

    LC52. N-Queens II 输出n皇后解的个数

    class Solution {
    public:
        int cnt = 0;
        int n;
        void dfs(int dep, int r, int s1, int s2) {
            if (dep == n) {
                cnt++;
                return;
            }
            for (int i = 0; i < n; ++i) {
                int j = 1 << i;
                if ((j & r) || (j & s1) || (j & s2)) continue;
                dfs(dep + 1, j | r, (j | s1) << 1, (j | s2) >> 1);
            }
        }
        int totalNQueens(int n) {
            cnt = 0;
            this -> n = n;
            dfs(0, 0, 0, 0);
            return cnt;
        }
    };

    LC51. N-QueensLC 输出n皇后所有的解

    class Solution {
    public:
        int n;
        vector<string> g;
        vector<vector<string>> res;
        void dfs(int dep, int r, int s1, int s2) {
            if (dep == n) {
                res.push_back(g);
                return;
            }
            for (int i = 0; i < n; ++i) {
                int j = 1 << i;
                if ((r & j) || (s1 & j) || (s2 & j)) continue;
                g[i][dep] = 'Q';
                dfs(dep + 1, r | j, (s1 | j) << 1, (s2 | j) >> 1);
                g[i][dep] = '.';
            }
        }
        vector<vector<string>> solveNQueens(int n) {
            this -> n = n;
            g.assign(n, string(n, '.'));
            dfs(0, 0, 0, 0);
            return res;
        }
    };
  • 相关阅读:
    redux和react-redux做简单组件控制
    store(转)
    react+redux开发详细步骤
    rudex 实现流程
    react eject 报错
    react生命周期
    python logging
    hihocoder 1754
    hihocoder_offer收割编程练习赛58
    内存检查
  • 原文地址:https://www.cnblogs.com/betaa/p/12448229.html
Copyright © 2020-2023  润新知