#include<bits/stdc++.h>
using namespace std;
typedef long long inr;
inline inr read() {
register inr x=0,f=1;
char ch=getchar();
while(ch<'0'||ch>'9') {
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9') {
x=x*10+ch-48;
ch=getchar();
}
return x*f;
}
inline void write(inr x) {
char F[200];
register inr tmp=x>0?x:-x,cnt=0;
while(tmp>0) {
F[cnt++]=tmp%10+'0';
tmp/=10;
}
if(x<0) putchar('-');
while(cnt>0) putchar(F[--cnt]);
if(x==0) putchar('0');
putchar('\n');
}
inr T,suc,sx,sy,a[10][10];
const inr t[7][7]= {
{0,0,0,0,0,0},
{0,1,1,1,1,1},
{0,0,1,1,1,1},
{0,0,0,2,1,1},
{0,0,0,0,0,1},
{0,0,0,0,0,0},
},dx[9]= {0,1,1,-1,-1,2,2,-2,-2},
dy[9]= {0,2,-2,2,-2,1,-1,1,-1};
char c;
inline inr bew() {
register inr cnt=0;
for(register inr i=1; i<=5; i++)
for(register inr j=1; j<=5; j++)
if(a[i][j]!=t[i][j]) cnt++;
return cnt;
}
inline void dfs(register inr tf,register inr x,register inr y,register inr tif) {
if(tf==tif) {
if(bew()==0) suc=1;
return;
}
for(register inr i=1; i<=8; i++) {
register inr tx=x+dx[i],ty=y+dy[i];
if(tx<1||tx>5||ty<1||ty>5) continue;
swap(a[x][y],a[tx][ty]);
inr b=bew();
if(b+tf<=tif) dfs(tf+1,tx,ty,tif);
swap(a[x][y],a[tx][ty]);
}
}
int main() {
T=read();
while(T--) {
suc=0;
for(inr i=1; i<=5; i++) {
for(inr j=1; j<=5; j++) {
c=getchar();
if(c=='*') a[i][j]=2,sx=i,sy=j;
else a[i][j]=c-'0';
}
getchar();
}
for(register inr tif=0; tif<=15; tif++) {
dfs(0,sx,sy,tif);
if(suc==1) {
write(tif);
break;
}
}
if(suc==0) write(-1);
}
return 0;
}
样例能过但是0分,求助