[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 }
本文为博主原创文章,未经博主允许不得转载。