/* 题意:有容量分别为Ca Cb 的A B两个壶 需要你通过几种操作使B壶中装有n容量的水 有如下操作 empty A empty B fill A fill B pour A B pour B A 成功后输出success */ #include<iostream> #include<stdio.h> #include<cstring> #include<string> #include<vector> using namespace std; int vis[1001][1001]; int ca,cb,n; vector <string> v; void DFS(int x,int y) { if(y==n) { for(int i=0;i<v.size();i++) cout<<v[i]<<endl; cout<<"success"<<endl; return; } if(!vis[ca][y]) { vis[ca][y]=1; v.push_back("fill A"); DFS(ca,y); v.pop_back(); } if(!vis[x][cb]) { vis[x][cb]=1; v.push_back("fill B"); DFS(x,cb); v.pop_back(); } if(!vis[0][y]) { vis[0][cb]=1; v.push_back("empty A"); DFS(0,cb); v.pop_back(); } if(!vis[x][0]) { vis[x][0]=1; v.push_back("empty B"); DFS(x,0); v.pop_back(); } if(x+y>=cb&&!vis[x-(cb-y)][cb]) { vis[x-cb+y][cb]=1; v.push_back("pour A B"); DFS(x-cb+y,cb); v.pop_back(); } if(x+y<cb&&!vis[0][x+y]) { vis[0][x+y]=1; v.push_back("pour A B"); DFS(0,x+y); v.pop_back(); } if(x+y>=ca&&!vis[ca][x+y-ca]) { vis[ca][x+y-ca]=1; v.push_back("pour B A"); DFS(ca,x+y-ca); v.pop_back(); } if(x+y<ca&&!vis[x+y][0]) { vis[x+y][0]=1; v.push_back("pour B A"); DFS(x+y,0); v.pop_back(); } } int main() { while(cin>>ca>>cb>>n) { v.clear(); memset(vis,0,sizeof(vis)); vis[0][0]=1; DFS(0,0); } }