[P1219]八皇后[位運算優化]
阿新 • • 發佈:2019-01-10
八皇后,一道非常經典的老題了
但是今天要用位運算優化,老實說一開始有點難理解
實際上現在也暈暈乎乎的,因為實在是位運算苦手……不難但是就是反應不過來,“誒這個符號是……啊啊想起來了!”“不對現在講到哪了[驚]”“雖然知道了這個符號是幹什麼的……還是看不懂orz”
差不多是明白了要幹什麼,總之就是朝著不能放皇后的列標記標記標☆
洛谷上的題還要求輸出方案,稍微折騰了一下
總之我討厭位運算(╯>д<)╯┻━┻
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<string>
#include<queue>
#include<vector>
using namespace std;
int n,uplimit,ans,que[20],t;
void dfs(int m,int ld,int rd)
{
int i;
if(m!=uplimit)
{
int pos=uplimit&~(m|ld|rd);
while(pos!=0)
{
int v=0;
int p=pos&(~pos+1);
pos-=p;
int k=p;
while(k!=0)
{
k=k>>1;
v++;
}
t++;
que[t]=v;
dfs(m+p,(ld+p)<<1,(rd+p)>>1);
t--;
}
}
else
{
ans++;
if(ans<=3)
{
for(i=1;i<=t;i++)
printf("%d ",que[i]);
printf("\n");
}
return;
}
}
int main()
{
scanf("%d",&n);
uplimit=(1<<n)-1;
dfs(0,0,0);
printf("%d",ans);
return 0;
}