1 #include<cstdio> 2 #include<iostream> 3 using namespace std; 4 struct data 5 { 6 int a[4][4],bu; 7 }q[100000]; 8 int h=0,t=1,f[1000000],b[4][4]; 9 char ch[8]; 10 int xx[4]={0,0,1,-1},yy[4]={1,-1,0,0}; 11 int hash(int b[4][4]) 12 { 13 int k=1,sum=0; 14 for(int i=0;i<4;i++) 15 for(int j=0;j<4;j++) 16 { 17 sum+=b[i][j]*k; 18 k<<=1; 19 } 20 return sum; 21 } 22 int main() 23 { 24 for(int i=0;i<4;i++) 25 { 26 scanf("%s",ch); 27 for(int j=0;j<4;j++) 28 q[t].a[i][j]=ch[j]-'0'; 29 } 30 for(int i=0;i<4;i++) 31 { 32 scanf("%s",ch); 33 for(int j=0;j<4;j++) 34 b[i][j]=ch[j]-'0'; 35 } 36 int a1=hash(b); 37 f[hash(q[h].a)]=1; 38 for(;h<t;) 39 { 40 h++; 41 int a2=hash(q[h].a); 42 if(a2==a1) 43 break; 44 for(int i=0;i<4;i++) 45 for(int j=0;j<4;j++) 46 if(q[h].a[i][j]==0) 47 for(int k=0;k<4;k++) 48 { 49 int nx=i+xx[k],ny=j+yy[k]; 50 if(ny<4&&ny>=0&&nx<4&&nx>=0&&q[h].a[nx][ny]) 51 { 52 t++; 53 q[t]=q[h]; 54 swap(q[t].a[nx][ny],q[t].a[i][j]); 55 if(!f[hash(q[t].a)]) 56 { 57 f[hash(q[t].a)]=1; 58 q[t].bu++; 59 } 60 else 61 t--; 62 } 63 } 64 } 65 printf("%d\n",q[h].bu); 66 return 0; 67 } 68
这是一个搜索。。。