zoukankan      html  css  js  c++  java
  • LeetCode-NQueensII

    经典的N皇后问题,

    这里学到了一个非常牛的新方法(http://www.matrix67.com/blog/archives/266),用位运算来求解N皇后问题;

    思路其实也很容易懂,一点都不复杂,

    同样是遍历每一行的每一列,只不过所有冲突的位置都用bit位置记录下来了,

    首先考虑在第k行的第j列放一个皇后,那么第k + 1行的第j - 1列和 j +1列都会与该皇后冲突,

    用位运算的左右移位就能表示所有列的有冲突的位置,那么在选择第k + 1行的放置位置的时候就只能选择

    无冲突的位置。

     1 class Solution {
     2 public:
     3     int totalNQueens(int n) {
     4         // Start typing your C/C++ solution below
     5         // DO NOT write int main() function
     6         int res = 0;
     7         getNQueens(res, n, 0, 0, 0);
     8         return res;
     9     }
    10     void getNQueens(int &res, int n, int row, int ld, int rd) {
    11         if (row == (1 << n) - 1) {
    12             ++res;
    13             return;
    14         }
    15         int pos = ~(row | ld | rd);
    16         for (int i = 0; i < n; ++i) {
    17             int p = 1 << i;
    18             if (pos & p) {
    19                 getNQueens(res, n, row | p, (ld | p) << 1, (rd | p) >> 1);
    20             }
    21         }
    22     }
    23 };
  • 相关阅读:
    Photoshop
    前端性能优化
    Angular Cli和npm、node.js命令
    Angular项目结构
    页面布局
    滚动条与height
    1.2 Angular入门
    前端的e2e测试
    Angular的部署
    jQuery插件开发的基本形式
  • 原文地址:https://www.cnblogs.com/chasuner/p/NQueens.html
Copyright © 2011-2022 走看看