http://acm.hdu.edu.cn/showproblem.php?pid=1495 #include<iostream> #include<queue> using namespace std; #define N 101 int a,b,c; struct node { int a,b,c; int step; }; bool h[N][N][N]; bool find(node p) { if(p.a==p.b&&p.a==a/2) return true; if(p.a==p.c&&p.a==a/2) return true; if(p.b==p.c&&p.c==a/2) return true; return false; } void bfs() { queue<node> q; node temp,p; p.a=a;p.b=p.c=p.step=0; h[a][b][c]=1; q.push(p); while(!q.empty()) { temp=q.front(); q.pop(); if(find(temp)) { printf("%d/n",temp.step); return; } p=temp; if(p.a!=0) { if(p.a>=b-p.b) { p.a-=(b-p.b); p.b=b; } else { p.b+=p.a; p.a=0; } if(!h[p.a][p.b][p.c]) { h[p.a][p.b][p.c]=1; p.step++; q.push(p); } } p=temp; if(p.a!=0) { if(p.a>=c-p.c) { p.a-=(c-p.c); p.c=c; } else { p.c+=p.a; p.a=0; } if(!h[p.a][p.b][p.c]) { p.step++; h[p.a][p.b][p.c]=1; q.push(p); } } p=temp; if(p.b!=0) { if(p.b>=a-p.a) { p.b-=(a-p.a); p.a=a; } else { p.a+=p.b; p.b=0; } if(!h[p.a][p.b][p.c]) { p.step++; h[p.a][p.b][p.c]=1; q.push(p); } } p=temp; if(p.b!=0) { if(p.b>=c-p.c) { p.b-=(c-p.c); p.c=c; } else { p.c+=p.b; p.b=0; } if(!h[p.a][p.b][p.c]) { p.step++; h[p.a][p.b][p.c]=1; q.push(p); } } p=temp; if(p.c!=0) { if(p.c>=a-p.a) { p.c-=(a-p.a); p.a=a; } else { p.a+=p.c; p.c=0; } if(!h[p.a][p.b][p.c]) { p.step++; h[p.a][p.b][p.c]=1; q.push(p); } } p=temp; if(p.c!=0) { if(p.c>=b-p.b) { p.c-=(b-p.b); p.b=b; } else { p.b+=p.c; p.c=0; } if(!h[p.a][p.b][p.c]) { p.step++; h[p.a][p.b][p.c]=1; q.push(p); } } } printf("NO/n"); } int main(void) { while(scanf("%d%d%d",&a,&b,&c),a||b||c) { if(a%2) printf("NO/n"); else { memset(h,0,sizeof(h)); bfs(); } } } 晕死,竟然h数组忘记初始化了!!代码写的很搓,冗长啊