// Problem C Ver. 1.0 // Coding , Debug : 50min #include #define MAX 30 int min; int ans[3][3], map[3][3][3]; int ex,ey; // empty int rol(int d) { struct {int x,y;} dxy[4] = { {-1,0}, {0,1}, {1,0}, {0,-1} }; // R D L U int tx = ex+dxy[d].x , ty = ey+dxy[d].y; if (tx<0 || ty<0 || tx>=3 || ty>=3) return 1; if (d&1) { // v roll map[ey][ex][0] = map[ty][tx][1]; map[ey][ex][1] = map[ty][tx][0]; map[ey][ex][2] = map[ty][tx][2]; } else { // h roll map[ey][ex][0] = map[ty][tx][2]; map[ey][ex][1] = map[ty][tx][1]; map[ey][ex][2] = map[ty][tx][0]; } ex = tx; ey = ty; map[ey][ex][0] = 'E'; return 0; } int cmp() { int i,j; for (i=0;i<3;i++) { for (j=0;j<3;j++) { if (map[i][j][0]!=ans[i][j]) return 0; } } return 1; } void solv(int depth,int last) { int i,tx,ty; if (depth>min || depth>MAX) return; if (cmp()) { min=depth; return; } for (i=0;i<4;i++) { if (((i+2)&3)==last) continue; if (rol(i)) continue; solv(depth+1,i); rol((i+2)&3); // back } } int main() { FILE *fp = fopen("C.txt","r"); int i,j; while(fscanf(fp,"%d %d ",&ex,&ey) && ex) { ex--; ey--; for (i=0;i<3;i++) { fscanf(fp,"%c %c %c ",&ans[i][0],&ans[i][1],&ans[i][2]); } for (i=0;i<3;i++) { for (j=0;j<3;j++) { map[i][j][0] = 'W'; map[i][j][1] = 'R'; map[i][j][2] = 'B'; } } map[ey][ex][0]='E'; min=MAX+1; solv(0,-1); printf("%d\n",min>MAX?-1:min); } return 0; }