• N-Queens II


    The n-queens puzzle is the problem of placing n queens on an n*n chessboard such that no two queens attack each other.
    Given an integer n, return all distinct solutions to the n-queens puzzle.
    Each solution contains a distinct board configuration of the n-queens' placement, where 'Q' and '.' both indicate a queen and an empty space respectively.
    For example,
    There exist two distinct solutions to the 4-queens puzzle:
    [
    [".Q..", // Solution 1
    "...Q",
    "Q...",
    "..Q."],

    ["..Q.", // Solution 2
    "Q...",
    "...Q",
    ".Q.."]
    ]

    Solution: 1. Recursion.
    2. Recursion + bit version. (fast)
    The idea is from http://www.matrix67.com/blog/archives/266 (in chinese).
    3. Iteration.

     1 class Solution {
     2 public:
     3     int totalNQueens(int n) {
     4         int res = 0;
     5         totalNQueensRe(n, 0, 0, 0, res);
     6         return res;
     7     }
     8     
     9     void totalNQueensRe(int n, int row, int ld, int rd, int &total)
    10     {
    11         if(row == (1 << n) - 1) {
    12             total++;
    13             return;
    14         }
    15         
    16         int valid = ~(row | ld | rd);
    17         for(int i = n - 1; i >= 0; --i) {
    18             int pos = 1 << i;
    19             if (valid & pos)
    20                 totalNQueensRe(n, row | pos, (ld | pos) << 1, (rd | pos) >> 1, total);
    21         }
    22     }
    23 };
  • 相关阅读:
    C++ promise
    C++ shared_future
    C++包装对象packaged_task
    C++ wait_for
    assert
    虚函数表构建时机
    C++ timed_mutex
    C++异步async
    C++原子操作atomic
    C++ typeid获取类型信息
  • 原文地址:https://www.cnblogs.com/zhengjiankang/p/3658146.html
Copyright © 2020-2023  润新知