#include<bits/stdc++.h>
using namespace std;
const char goal[6][6]={ '0','0','0','0','0','0',
'0','1','1','1','1','1',
'0','0','1','1','1','1',
'0','0','0','*','1','1',
'0','0','0','0','0','1',
'0','0','0','0','0','0'};
const int dx[9]={0,-2,-2,-1,-1,1,1,2,2};
const int dy[9]={0,-1,1,-2,2,-2,2,-1,1};
bool ok;
char a[6][6];
int check()
{
int t=0;
for (int i=1;i<=5;++i)
{
for (int j=1;j<=5;++j)
{
t+=(a[i][j]!=goal[i][j]);
}
}
return t;
}
void dfs(int bx,int by,int d)
{
if (d<=0)
{
if (check()==0)
ok=1;
return ;
}
for (int i=1;i<=8;++i)
{
int tx=bx+dx[i];
int ty=by+dy[i];
if (tx>=1&&tx<=5&&ty>=1&&ty<=5)
{
swap(a[bx][by],a[tx][ty]);
if (check()<=d)
dfs(tx,ty,d-1);
swap(a[bx][by],a[tx][ty]);
}
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
ok=false;
int bx,by;
for (int i=1;i<=5;++i)
{
scanf("%s",a[i]+1);
for (int j=1;j<=5;++j)
{
if (a[i][j]=='*')
{
bx=i;
by=j;
break;
}
}
}
for (int i=0;i<=15;++i)
{
dfs(bx,by,i);
if (ok)
{
printf("%d\n",i);
break;
}
}
if (!ok) puts("-1");
}
return 0;
}
为何将puts("-1")改为printf("-1\n")就只有10分
puts("-1");