TOJ 1070 Ouroboros Snake 解题

TOJ 1070 Ouroboros Snake 解题

方法感觉写起来有点像宽搜。
就是每次生成就好了
 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

你可能感兴趣的:(TOJ 1070 Ouroboros Snake 解题)