显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
unsigned ans=0,n,s[15]={0},upperlim=1;
//syzx王国正老师讲课版本
void queens_dfs(unsigned row,unsigned ld,unsigned rd,unsigned i)
{
if(i>n)
{
ans++;
if(ans<=3)
{
for(int i=1;i<=n;i++) cout<<s[i]<<" ";
cout<<endl;
}
}
else
{
int pos=(~(row|ld|rd))&upperlim;
while(pos>0)
{
int p=pos&(pos*(-1));
if(ans<=3)
{
int k=p,x=0;
while(k!=0)
{
k=k>>1;
x++;
}
s[i]=x;
}
pos-=p;
queens_dfs(row+p,(ld+p)<<1,(rd+p)>>1,i+1);
}
}
}
int main(){
freopen("checker.in","r",stdin);
freopen("checker.out","w",stdout);
cin>>n;
upperlim=(upperlim<<n)-1;
queens_dfs(0,0,0,1);
cout<<ans;
return 0;
}