Mother's Milk(usaco)
2010-08-06 11:45
483 查看
/* ID:tianlin2 PROG:milk3 LANG:C++ */ #include <iostream> #include <queue> #include <fstream> using namespace std; class node { public: int curcommand[3]; int curstate[3]; }; int states[21][21][21]={0}; int mycount=0; int isend[50]; int cmmd[6]={12,21,102,201,120,210}; int a,b,c; void bubble(int isend[],int mycount) { int b=0; while(!b){ b=1; for(int i=0;i!=mycount-1;++i){ if(isend[i]>isend[i+1]){ int temp=isend[i]; isend[i]=isend[i+1]; isend[i+1]=temp; b=0; } } } } int change(int& a1,int& b1,int& c1,int command) { switch(command){ case 12: if(b1==0||c1==c) return 0; if(c-c1>b1){ c1+=b1; b1=0; } else{ b1=b1-(c-c1); c1=c; } break; case 21: if(c1==0||b1==b) return 0; if(b-b1>c1){ b1+=c1; c1=0; } else{ c1=c1-(b-b1); b1=b; } break; case 102: if(a1==0||c1==c) return 0; if(c-c1>a1){ c1+=a1; a1=0; } else{ a1=a1-(c-c1); c1=c; } break; case 201: if(c1==0||a1==a) return 0; if(a-a1>c1){ a1+=c1; c1=0; } else{ c1=c1-(a-a1); a1=a; } break; case 120: if(a1==0||b1==b) return 0; if(b-b1>a1){ b1+=a1; a1=0; } else{ a1=a1-(b-b1); b1=b; } break; case 210: if(a1==a||b1==0) return 0; if(a-a1>b1){ a1+=b1; b1=0; } else{ b1=b1-(a-a1); a1=a; } break; } return 1; } int main() { ifstream fin("milk3.in"); ofstream fout("milk3.out"); fin>>a>>b>>c; states[0][0][c]=1; isend[mycount++]=c; queue<node> nodeq; node node1,node2; node1.curcommand[0]=0; node1.curcommand[1]=2; node1.curcommand[2]=1; int state[3]={0,0,c}; if(c>b){ node1.curstate[2]=c-b; node1.curstate[1]=b; node1.curstate[0]=0; states[0][b][c-b]=1; isend[mycount++]=c-b; } else{ node1.curstate[2]=0; node1.curstate[1]=c; node1.curstate[0]=0; states[0][c][0]=1; isend[mycount++]=0; } nodeq.push(node1); if(c>a){ node2.curstate[2]=c-a; node2.curstate[1]=0; node2.curstate[0]=a; states[a][0][c-a]=1; } else{ node2.curstate[2]=0; node2.curstate[1]=0; node2.curstate[0]=c; states[c][0][0]=1; } node2.curcommand[0]=2; node2.curcommand[1]=0; node2.curcommand[2]=1; nodeq.push(node2); while(!nodeq.empty()){ node curnode=nodeq.front(); nodeq.pop(); int curcmmd=curnode.curcommand[2]+curnode.curcommand[1]*10+curnode.curcommand[0]*100; int a1=curnode.curstate[0]; int b1=curnode.curstate[1]; int c1=curnode.curstate[2]; int i; for(i=0;i!=6;++i) if(cmmd[i]==curcmmd) break; for(int j=0;j!=6;++j){ int a2=a1,b2=b1,c2=c1; if(j/2!=i/2){ if(change(a2,b2,c2,cmmd[j])&&!states[a2][b2][c2]){ states[a2][b2][c2]=1; if(a2==0) isend[mycount++]=c2; node nxtnode; int nxtcmmd=cmmd[j]; nxtnode.curcommand[2]=nxtcmmd%10; nxtcmmd/=10; nxtnode.curcommand[1]=nxtcmmd%10; nxtcmmd/=10; nxtnode.curcommand[0]=nxtcmmd%10; nxtnode.curstate[0]=a2; nxtnode.curstate[1]=b2; nxtnode.curstate[2]=c2; nodeq.push(nxtnode); } } } } bubble(isend,mycount); for(int i=0;i!=mycount;++i){ if(!i) fout<<isend[i]; else fout<<' '<<isend[i]; } fout<<endl; //system("pause"); return 0; }
相关文章推荐
- USACO1.4.2 Mother's Milk (milk3)
- 【USACO】Mother's Milk(搜索)
- USACO Mother's Milk
- USACO-Section 1.4 Mother's Milk(BFS)
- USACO 1.4 Mother's Milk 母亲的牛奶(经典的dfs倒水问题)
- USACO 1.4.2 Mother's Milk
- USACO Mother's Milk, Number Triangles
- USACO Section 1.4 Mother's Milk - 输出错了好几次..
- Usaco 1.4.4 母亲的牛奶(Mother's Milk)
- USACO:Mother's Milk
- USACO1.4.2 Mother's Milk (milk3)
- [USACO 1.4.4] Mother's Milk
- USACO Mother's Milk
- USACO Section 1.4 Mother's Milk
- usaco mother'smilk
- Mother's Milk
- USCAO section Mother's Milk(搜索)
- Mother's Milk
- Section 1.4 Mother's Milk
- Mother's Milk母亲的牛奶