没有按照标程那样写
#include<cstdio>
#include<cstring>
const int N=2050;
int k,n,num[N],vis[N];
bool dfs(int u,int pos)
{
if(vis[u])return false;
if(pos==n)return true;
num[pos]=u&1;vis[u]=1;
if(dfs((u<<1)&(n-1),pos+1))return true;
if(dfs((u<<1|1)&(n-1),pos+1))return true;
vis[u]=0;
return false;
}
int main()
{
while(~scanf("%d",&k))
{
n=1<<k;
memset(vis,0,sizeof(vis));
dfs(0,1);
printf("%d ",n);
for(int i=1;i<k;i++)
printf("0");
for(int i=1;i<=n-k+1;i++)
printf("%d",num[i]);
printf("\n");
}
return 0;
}
总结
神奇的建图题