[kuangbin带你飞]专题一 简单搜索 - M - 非常可乐

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstring>
 4 #include<algorithm>
 5 #include<queue>
 6 using namespace std;
 7 bool cup[105][105][105];
 8 struct dot
 9 {
10     int a;
11     int b;
12     int c;
13     int s;
14 };
15 int x, y, z;
16 bool flag;
17 
18 int clam(int a, int b, int c)
19 {
20     int s;
21     switch(c)
22     {
23         case 1:    s = x;    break;
24         case 2:    s = y;  break;
25         case 3:    s = z;     break;
26     }
27     if( a+b < s)    return a;
28     else            return s-b;
29 }
30 
31 int main()
32 {
33 //    freopen("in.in","r",stdin);
34 //    freopen("out.txt","w",stdout);
35     while(scanf("%d%d%d",&x,&y,&z),x|y|z)
36     {
37         if( x& 1 )
38         {
39             printf( "NO\n" );
40             continue;
41         }
42         memset(cup,false,sizeof(cup));
43         flag = false;
44         queue<dot>q;
45         dot s, t;
46         s.a = x;
47         s.b = 0;
48         s.c = 0;
49         s.s = 0;
50         q.push(s);
51         while(q.size())
52         {
53             s = q.front();
54             q.pop();
55             cup[s.a][s.b][s.c] = true;
56             
57             if((s.a==x/2 && s.b==x/2) || (s.c==x/2 && s.b==x/2) || (s.c==x/2 && s.a==x/2) )
58             {
59                 flag = true;
60                 break;
61             }    
62             t.s = s.s + 1;
63             
64             t.a = s.a - clam(s.a,s.b,2);
65             t.b = s.b + clam(s.a,s.b,2);
66             t.c = s.c;
67             if(cup[t.a][t.b][t.c]==false)    q.push(t);
68             t.a = s.a + clam(s.b,s.a,1);
69             t.b = s.b - clam(s.b,s.a,1);
70             t.c = s.c;
71             if(cup[t.a][t.b][t.c]==false)    q.push(t);
72             t.a = s.a; 
73             t.b = s.b + clam(s.c,s.b,2);
74             t.c = s.c - clam(s.c,s.b,2);
75             if(cup[t.a][t.b][t.c]==false)    q.push(t);
76             t.a = s.a; 
77             t.b = s.b - clam(s.b,s.c,3);
78             t.c = s.c + clam(s.b,s.c,3);
79             if(cup[t.a][t.b][t.c]==false)    q.push(t);
80             t.a = s.a - clam(s.a,s.c,3);
81             t.b = s.b;  
82             t.c = s.c + clam(s.a,s.c,3);
83             if(cup[t.a][t.b][t.c]==false)    q.push(t);
84             t.a = s.a + clam(s.c,s.a,1);
85             t.b = s.b;  
86             t.c = s.c - clam(s.c,s.a,1);
87             if(cup[t.a][t.b][t.c]==false)    q.push(t);
88         }
89         if(flag)
90         {
91             while(q.size())    q.pop();
92             printf("%d\n",s.s);
93         }
94         else    printf("NO\n");
95         
96     }
97     return 0;
98 }

 

posted @ 2015-01-29 20:05  天I火  阅读(627)  评论(0编辑  收藏  举报