1. 程式人生 > >[P1219]八皇后[位運算優化]

[P1219]八皇后[位運算優化]

原題連結

八皇后,一道非常經典的老題了
但是今天要用位運算優化,老實說一開始有點難理解
實際上現在也暈暈乎乎的,因為實在是位運算苦手……不難但是就是反應不過來,“誒這個符號是……啊啊想起來了!”“不對現在講到哪了[驚]”“雖然知道了這個符號是幹什麼的……還是看不懂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; }