lijie201602 2017-09-24 01:21:13
点我顶贴
收藏
删除
#include<iostream>
#include<list>
#include<cstdio>
using namespace std;
list<int>sol;
int n;
int uplimit;
void print()
{
printf("\n");
list<int>::iterator i;
for(i=sol.begin();i!=sol.end();i++)
{
int tmp=*i,cnt=0;
while(tmp!=1)
{
cnt++;
tmp=tmp>>1;
}
for(int j=0;j<cnt;j++) printf("■");
printf("○");
for(int j=cnt+1;j<n;j++)printf("■");
printf("\n");
}
printf("\n");
}
void doans(int r,int ld,int rd)
{
if(r!=uplimit)
{
int pos=uplimit&~(r|ld|rd);
while(pos!=0)
{
int p=pos&(~pos+1);
pos-=p;
sol.push_back(p);
doans(r+p,(ld+p)<<1,(rd+p)>>1);
sol.pop_back();
}
}
else print();
}
int main()
{
scanf("%d",&n);
uplimit=(1<<n)-1;
doans(0,0,0);
return 0;
}