赞
踩
#include<bits/stdc++.h> using namespace std; int read(){ char c;int x;while(c=getchar(),c<'0'||c>'9');x=c-'0'; while(c=getchar(),c>='0'&&c<='9') x=x*10+c-'0';return x; } int ans[5][5]={ {1,1,1,1,1}, {0,1,1,1,1}, {0,0,2,1,1}, {0,0,0,0,1}, {0,0,0,0,0}, }; int n,k; string s; int f[5][5],flag,px,py; int u[8]={1,1,-1,-1,2,2,-2,-2}; int q[8]={2,-2,2,-2,1,-1,1,-1}; int check(){ for(int i=0;i<=4;i++) for(int j=0;j<=4;j++) if(f[i][j]!=ans[i][j]) return 0; return 1; } int A_STAR(int x){ int v=0; for(int i=0;i<=4;i++) for(int j=0;j<=4;j++) if(f[i][j]!=ans[i][j]){ v++;if(v+x>k) return 0; } return 1; } void dfs(int v,int x,int y){ if(v==k) {if(check())flag=1;return;} if(flag) return; for(int i=0;i<8;i++){ int gx=x+u[i],gy=y+q[i]; if(gx<0||gx>4||gy<0||gy>4) continue; swap(f[x][y],f[gx][gy]); if(A_STAR(v)) dfs(v+1,gx,gy); swap(f[x][y],f[gx][gy]); } } int main() { n=read(); while(n--){ memset(f,0,sizeof(f));flag=0; for(int i=1;i<=5;i++){ cin>>s; for(int j=0;j<5;j++){ if(s[j]=='*') f[i-1][j]=2,px=i-1,py=j; else f[i-1][j]=s[j]-'0'; } } for(k=1;k<=15;k++){ dfs(0,px,py); if(flag){ printf("%d\n",k);break; } } if(!flag) puts("-1"); } return 0; }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。