方法感覺(jué)寫起來(lái)有點(diǎn)像寬搜。
就是每次生成就好了
1
#include<stdio.h>
2
#include<string.h>
3
int s[33000],use[33000],now[33000],data[16][33000];
4
int n,n2,p,q,v,f,i,k;
5
int main()
6

{
7
for(n=2;n<=15;n++)
8
{
9
n2=1<<n;
10
memset(use,0,sizeof(use));
11
p=q=0;
12
s[p++]=0;
13
while(p>0)
14
{
15
v=s[p-1];
16
for(f=0;f<2;f++)
17
if(!use[(v<<1)+f])break;
18
if(f>=2)
{now[q++]=v;p--;}
19
else
20
{
21
use[(v<<1)+f]=1;
22
s[p++] = ((v<<1) + f ) & ((n2>>1) -1);
23
}
24
}
25
for(int i=0;i<n2;i++)
26
data[n][i]=(now[n2-i]<<1) | (now[n2-i-1]);
27
}
28
data[1][0]=0;data[1][1]=1;
29
while(scanf("%d%d",&n,&k),n)printf("%d\n",data[n][k]);
30
return 0;
31
}
32