码迷,mamicode.com
首页 > 其他好文 > 详细

Leetcode 52 N-Queens II 回溯搜索

时间:2016-01-24 23:47:33      阅读:265      评论:0      收藏:0      [点我收藏+]

标签:

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

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

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

      技术分享                                 技术分享                            技术分享 

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

 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 };

 

Leetcode 52 N-Queens II 回溯搜索

标签:

原文地址:http://www.cnblogs.com/onlyac/p/5156207.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!