zoukankan      html  css  js  c++  java
  • Leetcode 52 N-Queens II 回溯搜索

    对于N-Queens的每种情况,回答出每种情况的N-Queens的排列数。

    l,r和c是每种类型的格子是否有棋子。

    l判断的是这样的对角线的格子                   r判断的是这样的对角线的格子              c   判断的是这样的竖线格子

                                                                        

     枚举每行放一颗棋子,判断是否与前面冲突,如果不冲突一直到底就让答案+1 

     这种搜索也可以参考DFS框架Leetcode 130 Surrounded Regions DFS

     1 class Solution {
     2 public:
     3     std::vector<bool> l,r,c;
     4     int ans;
     5     int totalNQueens(int n) {
     6         l.resize(2 * n + 1, false);
     7         r.resize(2 * n + 1, false);
     8         c.resize(    n    , false);
     9         ans = 0;
    10         N_Queens(0 , n);
    11         l.clear();
    12         r.clear();
    13         c.clear();
    14         return ans;
    15     }
    16     void N_Queens(int now, int n){//计算N_Queens的可能数
    17         if (now == n) {//递归到底
    18             ans++;
    19             return;
    20         }
    21         else{
    22             for (int i = 0; i < n; ++i){
    23                 if (is_legal(now, i, n)){//与之前不冲突在这上面放上棋子
    24                     init(now, i, n, true);
    25                     N_Queens(now + 1, n);
    26                     init(now, i, n, false);
    27                 }
    28             }
    29         }
    30     }
    31     bool is_legal(int x, int y, int n){//判断是否与前面冲突
    32         return !c[y] && !l[x - y + n] && !r[x + y];
    33     }
    34     void init(int x, int y, int n, bool b){//l,r和c的值为b
    35         c[y] = l[x - y + n] = r[x + y] = b;
    36     }
    37 };
  • 相关阅读:
    持续集成环境搭建(一)
    The POSIX API/nss/nscd
    [postfix]转发邮件设置
    [python]python安装包错误
    栈及栈帧讲解
    kernel-init-bash
    nginx no input file specified
    Lumen/Laravel调试API接口利器laravel-debugbar
    homestead实现外部局域网络其他主机的访问
    PHP rabbitmq扩展安装
  • 原文地址:https://www.cnblogs.com/onlyac/p/5156207.html
Copyright © 2011-2022 走看看