RT,一直在输出-1.
#include <cstdio>
#include <algorithm>
using namespace std;
int t;
bool ok;
char st[7][7];
int dx[9]={-1,-2,-2,-1,1,2,2,1};
int dy[9]={-2,-1,1,2,2,1,-1,-2};
char ed[7][7]={{'1','1','1','1','1'},{'0','1','1','1','1'},{'0','0','*','1','1'},{'0','0','0','0','1'},{'0','0','0','0','0'}};
bool check(int x,int y){
return x<1||x>5||y<1||y>5;
}
int value(){
int res=0;
for (int i=1;i<6;i++){
for (int j=1;j<6;j++){
if (st[i][j]!=ed[i][j]){
++res;
}
}
}
return res;
}
void ida_star(int cnt,int x,int y,int dep){
// printf("%d %d %d %d\n",cnt,x,y,dep);
if (cnt==dep){
// for (int i=1;i<6;i++){
// for (int j=1;j<6;j++){
// printf("%c",st[i][j]);
// }
// puts("");
// }
if (!value()){
ok=true;
}
return;
}
for (int i=0;i<8;i++){
int nx=x+dx[i];
int ny=y+dy[i];
if (check(nx,ny)) continue;
swap(st[x][y],st[nx][ny]);
int now=value();
if (now+cnt<=dep){
ida_star(cnt+1,nx,ny,dep);
}
swap(st[x][y],st[nx][ny]);
}
}
int main(){
scanf("%d",&t);
while(t--){
ok=false;
for (int i=1;i<6;i++){
scanf("%s",st[i]+1);
}
int sx,sy;
for (int i=1;i<6;i++){
for (int j=1;j<6;j++){
if (st[i][j]=='*'){
sx=i;
sy=j;
i=6;
break;
}
}
}
for (int i=0;i<16;i++){
// printf("%d %d %d %d\n",0,sx,sy,i);
ida_star(0,sx,sy,i);
if (ok){
printf("%d\n",i);
break;
}
}
if (!ok){
puts("-1");
}
}
return 0;
}