信息
- ID
- 106
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 1
- 标签
- 递交数
- 59
- 已通过
- 48
- 上传者
#include<cstdio>
#include<iostream>
#include<cstring>
#define INF 536870912
using namespace std;
char map[6][6];
char check[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',
};
int xm[9]={0,-2,-2,-1,-1,1,1,2,2};
int ym[9]={0,-1,1,-2,2,-2,2,-1,1};
int ans;
inline void swap(char &p1,char &p2){
char mid=p1; p1=p2; p2=mid;
}
inline int dif(){
int ret=0;
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
if(map[i][j]!=check[i][j]) ret++;
}
}
return ret;
}
inline void dfs(int x,int y,int d,int f){
int l=dif();
if(d+l>16) return ;
if(d>=ans) return ;
if(l==0){
ans=d; return ;
}
for(int i=1;i<=8;i++){
if((x+xm[i]<1)||(x+xm[i]>5)) continue;
if((y+ym[i]<1)||(y+ym[i]>5)) continue;
if(f+i!=9){
swap(map[y+ym[i]][x+xm[i]],map[y][x]);
dfs(x+xm[i],y+ym[i],d+1,i);
swap(map[y+ym[i]][x+xm[i]],map[y][x]);
}
}
}
inline void init(){
int x,y;
for(int i=1;i<=5;i++) cin>>map[i]+1;
for(int i=1;i<=5;i++){
for(int j=1;j<=5;j++){
if(map[i][j]=='*') { x=j; y=i; }
}
}
ans=25;
dfs(x,y,0,0);
printf("%d\n",ans==25?-1:ans);
}
int main(){
int t;
scanf("%d",&t);
while(t--)init();
return 0;
}