importjava.util.Arrays;importjava.util.LinkedList;importjava.util.Queue;importjava.util.Scanner;classState
{int glass[] = new int[3];intstep;
}public classMain
{static final int MAX = 3;static int v[] = new int[MAX];static int e[] = new int[MAX];static boolean vis[][][] = new boolean[300][300][300];static intflag;public static voidmain(String []args)
{
Scanner cin= newScanner(System.in);int N =cin.nextInt();for(int i = 0; i < N; i++)
{for(int j = 0; j < 3; j++)
{
v[j]=cin.nextInt();
}for(int j = 0; j < 3; j++)
{
e[j]=cin.nextInt();
}
flag= 0;
Init();
BFS();if(flag == 0)
{
System.out.println("-1");
}
}
}static voidInit()
{for(int i = 0; i < v[0]; i++)
{for(int j = 0; j < v[0]; j++)
{for(int k = 0; k < v[0]; k++)
{
vis[i][j][k]= false;
}
}
}
}static voidBFS()
{
State start= newState();
start.glass[0] = v[0];
start.glass[1] = 0;
start.glass[2] = 0;if(start.glass[0] == e[0] && start.glass[1] == e[1] && start.glass[2] == e[2])
{
flag= 1;
System.out.println("0");return;
}
Queue que = new LinkedList();
que.add(start);
vis[start.glass[0]][start.glass[1]][start.glass[2]] = true;while(!que.isEmpty())
{
State temp= newState();
temp=que.poll();for(int i = 0; i < 3; i++)//核心代码
{if(temp.glass[i] == 0)
{continue;
}//i向j中倒水
for(int j = 0; j < 3; j++)
{if(j == i || temp.glass[j] == v[j]) //同一个杯子或者这个杯子已经满了
{continue;
}//向其他某个杯子倒
State mid = newState();//此处的对象用得很巧妙(不可以定义在这个循环的外面),我之前都是建立一个很大很大的数组用来保存队列,太浪费空间了。
mid.glass[0] = temp.glass[0];
mid.glass[1] = temp.glass[1];
mid.glass[2] = temp.glass[2];
mid.step= temp.step+1;int rest = v[j]-temp.glass[j];if(rest <=mid.glass[i])
{
mid.glass[j]=v[j];
mid.glass[i]= mid.glass[i]-rest;if(vis[mid.glass[0]][mid.glass[1]][mid.glass[2]] == false)
{if(mid.glass[0] == e[0] && mid.glass[1] == e[1] && mid.glass[2] == e[2])
{
flag= 1;
System.out.println(mid.step);return;
}
que.add(mid);
vis[mid.glass[0]][mid.glass[1]][mid.glass[2]] = true;
}
}else{
mid.glass[j]= mid.glass[j] +mid.glass[i];
mid.glass[i]= 0;if(vis[mid.glass[0]][mid.glass[1]][mid.glass[2]] == false)
{if(mid.glass[0] == e[0] && mid.glass[1] == e[1] && mid.glass[2] == e[2])
{
flag= 1;
System.out.println(mid.step);return;
}
que.add(mid);
vis[mid.glass[0]][mid.glass[1]][mid.glass[2]] = true;
}
}
}
}
}
}
}