zoukankan      html  css  js  c++  java
  • LeetCode 每日一题 51.N 皇后

    51.N 皇后

    题目链接:51.N 皇后

    _n _皇后问题研究的是如何将 n 个皇后放置在 n × n 的棋盘上,并且使皇后彼此之间不能相互攻击。

    上图为 8 皇后问题的一种解法。

    给定一个整数 n ,返回所有不同的 _n _皇后问题的解决方案。

    每一种解法包含一个明确的 n 皇后问题的棋子放置方案,该方案中 'Q''.' 分别代表了皇后和空位。

    示例:

    **输入:** 4
    **输出:** [
     [".Q..",  // 解法 1
      "...Q",
      "Q...",
      "..Q."],
    
     ["..Q.",  // 解法 2
      "Q...",
      "...Q",
      ".Q.."]
    ]
    **解释:** 4 皇后问题存在两个不同的解法。
    

    提示:

    • 皇后彼此不能相互攻击,也就是说:任何两个皇后都不能处于同一条横行、纵行或斜线上。

    我的题解

    #pragma G++ optimize(2)
    #pragma GCC optimize(2)
    
    class Solution {
     public:
      vector<vector<string>> ans;
      vector<int> status;
      int n;
    
      void gao(int s, int main, int counter, int col) {
        if (s == n) {
          vector<string> str(n, string(n, '.'));
          for (int i = 0; i < n; ++i) str[i][status[i]] = 'Q';
          ans.emplace_back(str);
          return;
        }
    
        int a = ~(col | (main >> 1) | (counter << 1));
        a &= (1 << n) - 1;
        for (int p = 1, i = 0; p < (1 << n); p <<= 1, i++) {
          if (p & a) {
            status.emplace_back(i);
            gao(s + 1, (main >> 1) | p, (counter << 1) | p, col | p);
            status.pop_back();
          }
        }
      }
    
      vector<vector<string>> solveNQueens(int _n) {
        n = _n;
        ans.clear();
        gao(0, 0, 0, 0);
        return ans;
      }
    };
    
  • 相关阅读:
    家长如何助力孩子适应小学生活
    一年级线上家长会
    gdb常用调试命令
    二叉树-后序遍历
    机器人
    Oracle创建只读账号的详细步骤
    ORACLE RAC日常运维-调整RAC+DG环境redo大小
    Redis 延迟分析
    oracle dataguard 重启步骤
    catalog start with + switch database to copy的妙用
  • 原文地址:https://www.cnblogs.com/Forgenvueory/p/13612270.html
Copyright © 2011-2022 走看看