求大佬看看哪里错了?

P2739 [USACO4.4] 棋盘游戏Shuttle Puzzle

```cpp #include<cstdio> #define fo(i,x,y) for(int i=x;i<=y;i++) using namespace std; int n,a[25],b[169],p,max,ans; void dg(int x,int w,int s) { if(x>max)return; b[x]=w; if(x==max) { if (w!=n+1) return; fo(i,1,x) { printf("%d ",b[i]); if(i%20==0) printf("\n"); } p=1; return; } if(w>2&&a[w-2]==1) { int k=a[w];a[w]=a[w-2];a[w-2]=k; dg(x+1,w-2,s-(1<<(w-3))+(1<<(w-1))); if(p)return; k=a[w];a[w]=a[w-2];a[w-2]=k; } if(w>1&&a[w-1]==1) { int k=a[w];a[w]=a[w-1];a[w-1]=k; dg(x+1,w-1,s-(1<<(w-2))+(1<<(w-1))); if(p)return; k=a[w];a[w]=a[w-1];a[w-1]=k; } if(w<n+n+1&&a[w+1]==2) { int k=a[w];a[w]=a[w+1];a[w+1]=k; dg(x+1,w+1,s); if(p)return; k=a[w];a[w]=a[w+1];a[w+1]=k; } if(w<n+n&&a[w+2]==2) { int k=a[w];a[w]=a[w+2];a[w+2]=k; dg(x+1,w+2,s); if(p)return; k=a[w];a[w]=a[w+2];a[w+2]=k; } } int main() { scanf("%d",&n); fo(i,1,n) {a[i]=1; a[i+n+1]=2;} a[n+1]=0; max=(n+2)*n; ans=(1<<(n+n+1))-(1<<(n+1)); dg(0,n+1,(1<<n)-1); }应该是这样 ```
by hejiaqi123 @ 2017-03-18 12:55:53


|