六中情況:
1->2
2->1
1->3
3->1
2->3
3->2
#include <iostream>#include <cstring>#include <string>#include <algorithm>#include <cmath>#include <queue>using namespace std;struct shuibei{int x,y,z,step;}e;int v1,v2,v3;int bz[105][105][105];queue<shuibei> q;int bfs(shuibei s){int i,j,x,y,z; shuibei t,tt;while(!q.empty()) q.pop();q.push(s); bz[s.x][s.y][s.z]=1;while(!q.empty()){t=q.front(); q.pop();//杯1不空,杯2不滿 1->2 if(t.x!=0&&t.y<v2){if(t.y+t.x>v2)//倒不完,能滿為止 {x=t.x-(v2-t.y);y=v2;z=t.z;}else if(t.y+t.x<=v2) //可以倒完,直接倒完 {y=t.x+t.y;x=0;z=t.z;}if(x==e.x&&y==e.y&&e.z==z) return t.step+1;if(!bz[x][y][z]){tt.x=x;tt.y=y;tt.z=z; tt.step=t.step+1; bz[x][y][z]=1; q.push(tt);}}//杯2不空,杯1不滿 2->1 if(t.y!=0&&t.x<v1){if(t.y+t.x>v1)//倒不完,能滿為止 {y=t.y-(v1-t.x);x=v1;z=t.z;}else if(t.y+t.x<=v1) //可以倒完,直接倒完 {x=t.x+t.y;y=0;z=t.z;}if(x==e.x&&y==e.y&&e.z==z) return t.step+1;if(!bz[x][y][z]){tt.x=x;tt.y=y;tt.z=z; tt.step=t.step+1; bz[x][y][z]=1; q.push(tt);}}//杯1不空,杯3不滿 1->3 if(t.x!=0&&t.z<v3){if(t.z+t.x>v3)//倒不完,能滿為止 {x=t.x-(v3-t.z);z=v3;y=t.y;}else if(t.z+t.x<=v3) //可以倒完,直接倒完 {z=t.x+t.z;x=0;y=t.y;}if(x==e.x&&y==e.y&&e.z==z) return t.step+1;if(!bz[x][y][z]){tt.x=x;tt.y=y;tt.z=z; tt.step=t.step+1; bz[x][y][z]=1; q.push(tt);}}//杯3不空,杯1不滿 3->1 if(t.z!=0&&t.x<v1){if(t.z+t.x>v1)//倒不完,能滿為止 {z=t.z-(v1-t.x);x=v1;y=t.y;}else if(t.z+t.x<=v1) //可以倒完,直接倒完 {x=t.x+t.z;z=0;y=t.y;}if(x==e.x&&y==e.y&&e.z==z) return t.step+1;if(!bz[x][y][z]){tt.x=x;tt.y=y;tt.z=z; tt.step=t.step+1; bz[x][y][z]=1; q.push(tt);}}//杯2不空,杯3不滿 2->3 if(t.y!=0&&t.z<v3){if(t.z+t.y>v3)//倒不完,能滿為止 {y=t.y-(v3-t.z);z=v3;x=t.x;}else if(t.z+t.y<=v3) //可以倒完,直接倒完 {z=t.y+t.z;y=0;x=t.x;}if(x==e.x&&y==e.y&&e.z==z) return t.step+1;if(!bz[x][y][z]){tt.x=x;tt.y=y;tt.z=z; tt.step=t.step+1; bz[x][y][z]=1; q.push(tt);}}//杯3不空,杯2不滿 3->2 if(t.z!=0&&t.y<v2){if(t.z+t.y>v2)//倒不完,能滿為止 {z=t.z-(v2-t.y);y=v2;x=t.x;}else if(t.z+t.y<=v2) //可以倒完,直接倒完 {y=t.y+t.z;z=0;x=t.x;}if(x==e.x&&y==e.y&&e.z==z) return t.step+1;if(!bz[x][y][z]){tt.x=x;tt.y=y;tt.z=z; tt.step=t.step+1; bz[x][y][z]=1; q.push(tt);}}}return -1;}int main(int argc, char *argv[]){int t,i,j;shuibei s;cin>>t;while(t--){memset(bz,0,sizeof(bz));cin>>v1>>v2>>v3;cin>>e.x>>e.y>>e.z;s.x=v1; s.y=s.z=0; s.step=0;if(s.x==e.x&&s.y==e.y&&s.z==e.z) cout<<0<<endl;else cout<<bfs(s)<<endl;}return 0;}