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 };
  • 相关阅读:
    Jquery easyui中的有效性检查
    当执行批量删除时
    nested exception is com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1044 > 1024
    java的四种取整方法
    springmvc乱码解决
    跨域
    垂直居中
    js判断数组
    安装 node-sass 的正确姿势
    js判断qq浏览器
  • 原文地址:https://www.cnblogs.com/onlyac/p/5156207.html
Copyright © 2011-2022 走看看