非常可乐
1 #include<queue>
2 #include<iostream>
3 using namespace std;
4 int hash[110][110][110];
5 int s,n,m;
6 struct point
7 {
8 int x,y,z,count;
9 }pos,son,begin;
10 void bfs()
11 {
12 int i,ans=s/2;
13 queue<point>Q;
14 begin.x=s;
15 begin.y=0;
16 begin.z=0;
17 begin.count=0;
18 hash[s][0][0]=1;
19 Q.push(begin);
20 while(!Q.empty())
21 {
22 pos=Q.front();
23 Q.pop();
24
25 if(pos.x==ans&&pos.y==ans||pos.x==ans&&pos.z==ans||pos.y==ans&&pos.z==ans)
26 {
27 printf("%d\n",pos.count);
28 return;
29 }
30 if(pos.x!=0)
31 {
32 if(pos.y!=n)
33 {
34 son.x=pos.x-(n-pos.y);
35 son.y=n;
36 son.z=pos.z;
37 if(!hash[son.x][son.y][son.z])
38 {
39 son.count=pos.count+1;
40 hash[son.x][son.y][son.z]=1;
41 Q.push(son);
42 }
43 }
44 if(pos.z!=m)
45 {
46 son.x=pos.x-(m-pos.z);
47 son.y=pos.y;
48 son.z=m;
49 if(!hash[son.x][son.y][son.z])
50 {
51 son.count=pos.count+1;
52 hash[son.x][son.y][son.z]=1;
53 Q.push(son);
54 }
55 }
56 }
57 if(pos.y!=0)
58 {
59
60 son.x=pos.x+pos.y;
61 son.y=0;
62 son.z=pos.z;
63 if(!hash[son.x][son.y][son.z])
64 {
65 son.count=pos.count+1;
66 hash[son.x][son.y][son.z]=1;
67 Q.push(son);
68 }
69 if(pos.y<m-pos.z)
70 {
71 son.x=pos.x;
72 son.y=0;
73 son.z=pos.z+pos.y;
74 if(!hash[son.x][son.y][son.z])
75 {
76 son.count=pos.count+1;
77 hash[son.x][son.y][son.z]=1;
78 Q.push(son);
79 }
80 }
81 else
82 {
83 son.x=pos.x;
84 son.y=pos.y-(m-pos.z);
85 son.z=m;
86 if(!hash[son.x][son.y][son.z])
87 {
88 son.count=pos.count+1;
89 hash[son.x][son.y][son.z]=1;
90 Q.push(son);
91 }
92
93 }
94
95 }
96
97 if(pos.z!=0)
98 {
99
100 son.x=pos.x+pos.z;
101 son.y=pos.y;
102 son.z=0;
103 if(!hash[son.x][son.y][son.z])
104 {
105 son.count=pos.count+1;
106 hash[son.x][son.y][son.z]=1;
107 Q.push(son);
108 }
109 if(pos.z<n-pos.y)
110 {
111 son.x=pos.x;
112 son.y=pos.y+pos.z;
113 son.z=0;
114 if(!hash[son.x][son.y][son.z])
115 {
116 son.count=pos.count+1;
117 hash[son.x][son.y][son.z]=1;
118 Q.push(son);
119 }
120 }
121 else
122 {
123 son.x=pos.x;
124 son.y=n;
125 son.z=pos.z-(n-pos.y);
126 if(!hash[son.x][son.y][son.z])
127 {
128 son.count=pos.count+1;
129 hash[son.x][son.y][son.z]=1;
130 Q.push(son);
131 }
132
133 }
134
135 }
136 }
137
138 printf("NO\n");
139 return;
140 }
141 int main()
142 {
143 int i,k,j;
144
145 while(~scanf("%d%d%d",&s,&n,&m))
146 {
147 if(s==0&&n==0&&m==0)
148 break;
149 if(s%2)
150 {printf("NO\n");continue;}
151 for(i=0;i<=s;i++)
152 for(j=0;j<=n;j++)
153 for(k=0;k<=m;k++)
154 hash[i][j][k]=0;
155
156 bfs();
157
158 }
159
160 return 0;
161 }
自己的WA了,奇怪的是找了很多代码也都WA了,经过不断地尝试,终于找到一个AC的了~~

浙公网安备 33010602011771号