fork(1) download
  1. int Y,X,T;char B[32][32],K[32][32],Ks[32],px[2048];
  2. int tr(int x,int y){int i=0,d=0;
  3. for(;B[x][y];i++){px[i*2]=x;px[i*2+1]=y;x+=(d==2)-(d==1);y+=(d==3)-(d==0);
  4. d=(54202126527627840ll>>2*(d*7+B[x][y]))&3;
  5. if(x==px[0]&&y==px[1])return i+1;
  6. }return T;}
  7. void m(int x,int y) {
  8. int i,o,c=K[x][y],Bu=B[x][y-1],Bl=B[x-1][y];
  9. if(y>Y){for(i=0;i<T*2;i++)printf("%d ",px[i]-1);exit(0);}
  10. o=((39>>Bu)&1?57:70)&((52>>Bl)&1?42:85);
  11. if(x==X)o&=75;
  12. if(y==Y)o&=39;
  13. if(c==2)o&=96;
  14. if(K[x][y-1]==2)o&=~64;
  15. if(K[x-1][y]==2)o&=~32;
  16. if(c==1)o&=Bu==3||Bu==4||Bl==2||Bl==4?0:30;
  17. if(K[x][y-1]==1)o&=~6;
  18. if(K[x-1][y]==1)o&=~10;
  19. for(i=0;i<7;i++)if(o&(1<<i)){
  20. B[x][y]=i;
  21. if(c==2&&(i==5&&Bl!=5||i==6&&Bu!=6))K[x][y]=0;
  22. T+=i&&!c;
  23. if(i!=1||T==tr(x,y))x<X?m(x+1,y):m(1,y+1);
  24. T-=i&&!c;
  25. K[x][y]=c;}
  26. B[x][y]=0;}
  27. main(){for(;gets(Ks);Y++)for(X=0;Ks[X];X++)
  28. T+=(K[X+1][Y+1]=Ks[X]=='w'?2:Ks[X]=='b')>0;
  29. m(1,1);return 0;}
Success #stdin #stdout 0s 2060KB
stdin
.....w.b.w..
ww..b...b...
.w.....b....
...wbww..b.b
....b.......
w.w.........
..w......b.b
.....bb.....
.....b.....w
w.ww..b.....
...w......w.
b..w.....b..
stdout
11 11 11 10 11 9 11 8 11 7 10 7 10 8 9 8 9 7 9 6 10 6 11 6 11 5 11 4 11 3 10 3 9 3 9 4 9 5 8 5 8 4 8 3 8 2 8 1 9 1 10 1 10 0 9 0 8 0 7 0 7 1 7 2 6 2 5 2 5 1 6 1 6 0 5 0 4 0 3 0 2 0 2 1 3 1 4 1 4 2 4 3 5 3 6 3 7 3 7 4 6 4 5 4 4 4 4 5 4 6 3 6 3 5 3 4 3 3 3 2 2 2 2 3 1 3 1 2 1 1 1 0 0 0 0 1 0 2 0 3 0 4 0 5 0 6 1 6 1 5 1 4 2 4 2 5 2 6 2 7 1 7 1 8 0 8 0 9 0 10 0 11 1 11 2 11 3 11 4 11 4 10 3 10 2 10 1 10 1 9 2 9 3 9 4 9 4 8 3 8 3 7 4 7 5 7 5 6 5 5 6 5 6 6 6 7 7 7 8 7 8 8 7 8 6 8 5 8 5 9 5 10 5 11 6 11 6 10 6 9 7 9 8 9 8 10 7 10 7 11 8 11 9 11 9 10 9 9 10 9 10 10 10 11