N皇后 (位运算)
2017-02-07 15:09
113 查看
二进制log2(t)+1 便是位数
#include<iostream> #include<cmath> #include<cstdio> #include<cstring> #include<algorithm> #include<queue> using namespace std; int n; int p; int s=0; int sol[999]; int ans=0; int log2(int a)//log { switch (a) { case 1: return 1; case 2: return 2; case 4: return 3; case 8: return 4; case 16: return 5; case 32: return 6; case 64: return 7; case 128: return 8; case 256: return 9; case 512: return 10; case 1024: return 11; case 2048: return 12; case 4096: return 13; } } void print() { for(int i=1;i<=n;i++) { printf("%d ",log2(sol[i])); } printf("\n"); } void dfs(int r,int rl,int ll) { if(r==p) { ans++; if(ans<=3) print(); return; } int pos=p&~(r|rl|ll); while(pos!=0) { int t=pos&(-pos); pos-=t; sol[++s]=t; dfs(r|t,(rl|t)<<1,(ll|t)>>1); --s; } } int main() { scanf("%d",&n); p=(1<<n)-1; dfs(0,0,0); printf("%d",ans); return 0; }
相关文章推荐
- 皇后问题(DFS)(位运算)
- N皇后(位运算)
- HDOJ 2553 皇后问题(1、回溯法 2、位运算)
- N皇后问题--用位运算解决
- luoguP1562 还是N皇后-状态压缩、位运算优化搜索
- 用位运算解n皇后问题
- N皇后-回溯-位运算解法
- 【位运算经典应用】 N皇后问题
- n皇后 位运算
- N皇后问题 位运算解法【JAVA实现】
- N皇后问题(位运算)
- N皇后问题的位运算求解——目前最快的方法
- n皇后方案总数的位运算优化
- HDU2553_N皇后_位运算DFS
- 杭电2553 N皇后问题(普通方法和位运算两种方法)
- n皇后问题位运算
- LeetCode-Single Number II[位运算]
- N皇后问题
- 经典算法---8皇后问题的C++实现
- 【十一】递归与回溯--解决8皇后问题