LeetCode N皇后 & N皇后 II
Posted zaq19970105
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode N皇后 & N皇后 II相关的知识,希望对你有一定的参考价值。
题目链接:https://leetcode-cn.com/problems/n-queens/
题目链接:https://leetcode-cn.com/problems/n-queens-ii/
题目大意:
略。
分析:
代码如下:
1 class Solution 2 public: 3 int allOne; 4 vector<vector<string>> ans; 5 vector<string> ret; 6 string tmp; 7 int N; 8 9 vector<vector<string>> solveNQueens(int n) 10 allOne = (1 << n) - 1; 11 ans.clear(); 12 tmp.assign(n, ‘.‘); 13 ret.assign(n, tmp); 14 N = n; 15 16 solve(0, 0, 0, 0); 17 18 return ans; 19 20 21 // vd : 竖直方向 22 // ld : 左斜线方向 23 // rd : 右斜线方向 24 void solve(int level, int vd, int ld, int rd) 25 if(level == N) 26 ans.push_back(ret); 27 return; 28 29 30 int limit = (vd | ld | rd) ^ allOne; 31 int pos; 32 33 while(limit) 34 pos = lowbit(limit); 35 limit = cutLowbit(limit); 36 37 ret[level][N - __builtin_ffs(pos)] = ‘Q‘; 38 solve(level + 1, vd | pos, ((ld | pos) >> 1) & allOne, ((rd | pos) << 1) & allOne); 39 ret[level][N - __builtin_ffs(pos)] = ‘.‘; 40 41 42 43 int lowbit(int x) 44 return x & (-x); 45 46 47 int cutLowbit(int x) 48 return x & (x - 1); 49 50 ;
1 class Solution 2 public: 3 int allOne; 4 int ans; 5 int N; 6 7 int totalNQueens(int n) 8 allOne = (1 << n) - 1; 9 ans = 0; 10 N = n; 11 12 solve(0, 0, 0, 0); 13 14 return ans; 15 16 17 // vd : 竖直方向 18 // ld : 左斜线方向 19 // rd : 右斜线方向 20 void solve(int level, int vd, int ld, int rd) 21 if(level == N) 22 ++ans; 23 return; 24 25 26 int limit = (vd | ld | rd) ^ allOne; 27 int pos; 28 29 while(limit) 30 pos = lowbit(limit); 31 limit = cutLowbit(limit); 32 33 solve(level + 1, vd | pos, ((ld | pos) >> 1) & allOne, ((rd | pos) << 1) & allOne); 34 35 36 37 int lowbit(int x) 38 return x & (-x); 39 40 41 int cutLowbit(int x) 42 return x & (x - 1); 43 44 ;
以上是关于LeetCode N皇后 & N皇后 II的主要内容,如果未能解决你的问题,请参考以下文章