三个水杯

 1 #include<stdio.h>
 2 #include<queue>
 3 #include<string.h>
 4 using namespace std;
 5 
 6 int c[2][3];
 7 int v[100][100];
 8 typedef struct 
 9 {
10     int vis[3];
11     int deep;
12 }node;
13 
14 int fun()
15 {
16     int i,j,at;
17     queue <node> q;
18     node n,t;
19     memset(v,0,sizeof(v));
20     n.vis[0]=c[0][0];
21     n.vis[1]=n.vis[2]=0;
22     n.deep=0;
23     q.push(n);
24     while(!q.empty())
25     {
26         t=q.front();
27         if(t.vis[0]==c[1][0]&&t.vis[1]==c[1][1]&&t.vis[2]==c[1][2])
28             return t.deep;
29         for(i=0;i<3;i++)
30         {
31             for(j=0;j<3;j++)
32             {
33                 if(i==j) continue;
34                 at=t.vis[i]<c[0][j]-t.vis[j]?t.vis[i]:c[0][j]-t.vis[j];
35                 n=t;
36                 n.vis[i]-=at;
37                 n.vis[j]+=at;
38                 n.deep++;
39                 if(!v[n.vis[1]][n.vis[2]])
40                 {
41                     v[n.vis[1]][n.vis[2]]=1;
42                     q.push(n);
43                 }
44             }
45         }
46         q.pop();
47     }
48     return -1;
49 }
50 
51 int main()
52 {
53     int i,t;
54     scanf("%d",&t);
55     while(t--)
56     {
57         for(i=0;i<3;i++)
58             scanf("%d",&c[0][i]);
59         for(i=0;i<3;i++)
60             scanf("%d",&c[1][i]);
61         printf("%d\n",fun());
62     
63     }
64     return 0;
65 }
原文地址:https://www.cnblogs.com/xiaofanke/p/3002573.html