跪求大佬调整orz
import java.io.*;
import java.util.*;
public class Main {
static int N = 5,n,t;
static int[][] g = new int[N][N];
static int[] dx ={1,2,2,1,-1,-2,-2,-1},dy={-2,-1,1,2,2,1,-1,-2};
static int[] opposite = {4,5,6,7,0,1,2,3};
static int[][] ans ={
{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},
};
static int Int(String s){return Integer.parseInt(s);}
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static PrintWriter pw = new PrintWriter(new OutputStreamWriter(System.out));
public static void main(String[] args)throws IOException{
String[] arrStr = br.readLine().split(" ");
t = Int(arrStr[0]);
while(t -- > 0){
for(int i =0;i < 5;i++){
arrStr = br.readLine().split("");
for(int j =0 ;j < 5;j++){
if("*".equals(arrStr[j]) ){
g[i][j] = 2;
continue;
}
g[i][j] = Int(arrStr[j]);
}
}
int depth = 0;
while(depth <= 15 && !dfs(0,depth,-1) ) depth++;
if(depth > 15) pw.println(-1);
else pw.println(depth);
}
pw.flush();br.close();pw.close();
}
static boolean dfs(int u,int maxDepth,int last){
if(u + f() > maxDepth) return false;
if(f() == 0) return true;
int index = find();
int x = index / 5;int y = index % 5;
for(int i =0;i < 8;i++){
int a = x + dx[i];int b =y + dy[i];
if(opposite[i] == last) continue;
if(a < 0 || a >= 5 || b < 0 || b >= 5) continue;
operate(x,y,a,b);
if(dfs(u + 1,maxDepth,i)) return true;
operate(a,b,x,y);
}
return false;
}
static void operate(int a1,int a2,int b1,int b2){
int t = g[a1][a2];
g[a1][a2] = g[b1][b2];
g[b1][b2] = t;
}
static int find(){
int index =0;
for(int i = 0;i < 5;i++){
for(int j =0;j < 5;j++){
if(g[i][j]== 2) {
index = 5 * i + j;
break;
}
}
}
return index;
}
static int f(){
int cnt = 0;
for(int i = 0;i < 5;i++){
for(int j =0;j < 5;j++){
if(g[i][j] != ans[i][j]) cnt++ ;
}
}
return cnt;
}
}