#include #include #include int ca, cb, n; int oper[1010][1010]; int od_a[1100][1100]; int od_b[1100][1100]; int vzdal[1100][1100]; int idx; int best=0x0FFFFFFF; list la; list lb; int fa, fb; void pridej(int _a, int _b, int _vzdal, int _oper, int oa, int ob) { if (vzdal[_a][_b]!=0xFFFFFFFF) return; vzdal[_a][_b]=_vzdal+1; oper[_a][_b]=_oper; od_a[_a][_b]=oa; od_b[_a][_b]=ob; la.push_back(_a); lb.push_back(_b); } void alg() { memset(vzdal, 0xFF, sizeof(vzdal)); vzdal[0][0]=0; la.clear(); lb.clear(); la.push_back(0); lb.push_back(0); while(!la.empty()) { int a=la.front(); int b=lb.front(); la.pop_front(); lb.pop_front(); if (a==n || b==n) { fa=a; fb=b; return; } if (vzdal[a][b]==0xFFFFFFFF) continue; int vzdalenost=vzdal[a][b]; int na = a; int nb = b; nb=cb; pridej(na, nb, vzdalenost, 1, a, b); na=ca; nb=b; pridej(na, nb, vzdalenost, 2, a, b); na=0; nb=b; pridej(na, nb, vzdalenost, 3, a, b); na=ca; nb=0; pridej(na, nb, vzdalenost, 4, a, b); na=max(0, a-(cb+b) ); nb=min(cb, b+a); pridej(na, nb, vzdalenost, 5, a, b); na=min(ca, a+b ); nb=max(0, b-(ca+a)); pridej(na, nb, vzdalenost, 6, a, b); } } void vypis(int a, int b) { // printf("vypis enter %d %d \n", a, b); if ((a==0) && (b==0)) return; vypis(od_a[a][b], od_b[a][b]); switch (oper[a][b]) { case 1: printf("fill A\n"); break; case 2: printf("fill B\n"); break; case 3: printf("empty A\n"); break; case 4: printf("empty A\n"); break; case 5: printf("pour A B\n"); break; case 6: printf("pour B A\n"); break; } } int main() { while (EOF!=scanf("%d%d%d", &ca, &cb, &n)) { alg(); vypis(fa, fb); printf("success\n\n"); } return 0; }