移动字母
1 #include<stdio.h> 2 #include<string.h> 3 4 char a[7]; 5 char b[750][7]; 6 char c[6]={'A','B','C','D','E','*'}; 7 int t[4][2]={1,0,0,1,0,-1,-1,0}; 8 int temp; 9 10 int fun(char *p,int n,int m) 11 { 12 int i,j,x,y,u; 13 char v[6],k; 14 if(!(strcmp(p,c))) return 1; 15 else 16 for(i=0;i<4;i++) 17 { 18 x=n+t[i][0]; 19 y=m+t[i][1]; 20 strcpy(v,p); 21 if(x>=0&&x<2&&y>=0&&y<3) 22 { 23 k=v[x*3+y]; 24 v[x*3+y]=v[n*3+m]; 25 v[n*3+m]=k; 26 u=1; 27 for(j=0;j<temp;j++) 28 if(!strcmp(v,b[j])) 29 { 30 u=0; 31 break; 32 } 33 34 if(u) 35 { 36 strcpy(b[temp++],v); 37 return fun(v,x,y); 38 } 39 } 40 } 41 return 0; 42 } 43 44 int main() 45 { 46 int i,n,m,k; 47 scanf("%d",&k); 48 while(k--) 49 { 50 temp=1; 51 scanf("%s",a); 52 strcpy(b[0],a); 53 for(i=0;i<6;i++) 54 if(a[i]=='*') break; 55 n=i/3; 56 m=i%3; 57 printf("%d\n",fun(a,n,m)); 58 } 59 return 0; 60 }