poj 1606
#include<iostream>
#include<fstream>
#include<queue>
using namespace std;
int n,m,p;
struct node{
int s,t;
};
int pre[1001][1001];
node pre1[1001][1001];
int v[1001][1001];
void print(int s,int t){
int i,j,k;
if(pre[s][t]!=-1)
{
print(pre1[s][t].s,pre1[s][t].t);
if(pre[s][t]==1)
cout<<"fill A"<<endl;
if(pre[s][t]==2)
cout<<"fill B"<<endl;
if(pre[s][t]==3)
cout<<"empty A"<<endl;
if(pre[s][t]==4)
cout<<"empty B"<<endl;
if(pre[s][t]==5)
cout<<"pour B A"<<endl;
if(pre[s][t]==6)
cout<<"pour A B"<<endl;
}
}
void solve(){
int i,j,k;
node a;
a.s=0;
a.t=0;
queue<node> q;
q.push(a);
pre[0][0]=-1;
memset(v,0,sizeof(v));
v[0][0]=1;
while(!q.empty())
{
a=q.front();
q.pop();
node b;
b.s=n;
b.t=a.t;
if(v[b.s][b.t]==0)
{
v[b.s][b.t]=1;
pre[b.s][b.t]=1;
pre1[b.s][b.t]=a;
if(b.t==p)
{
i=b.s;
j=b.t;
break;
}
q.push(b);
}
b.t=m;
b.s=a.s;
if(v[b.s][b.t]==0)
{
v[b.s][b.t]=1;
pre[b.s][b.t]=2;
pre1[b.s][b.t]=a;
if(b.t==p)
{
i=b.s;
j=b.t;
break;
}
q.push(b);
}
b.s=0;
b.t=a.t;
if(v[b.s][b.t]==0)
{
v[b.s][b.t]=1;
pre[b.s][b.t]=3;
pre1[b.s][b.t]=a;
if(b.t==p)
{
i=b.s;
j=b.t;
break;
}
q.push(b);
}
b.s=a.s;
b.t=0;
if(v[b.s][b.t]==0)
{
v[b.s][b.t]=1;
pre[b.s][b.t]=4;
pre1[b.s][b.t]=a;
if(b.t==p)
{
i=b.s;
j=b.t;
break;
}
q.push(b);
}
b.s=min(n,a.s+a.t);
b.t=a.t-min(n,a.s+a.t)+a.s;
if(v[b.s][b.t]==0)
{
v[b.s][b.t]=1;
pre[b.s][b.t]=5;
pre1[b.s][b.t]=a;
if(b.t==p)
{
i=b.s;
j=b.t;
break;
}
q.push(b);
}
b.s=a.s-min(m,a.s+a.t)+a.t;
b.t=min(m,a.s+a.t);
if(v[b.s][b.t]==0)
{
v[b.s][b.t]=1;
pre[b.s][b.t]=6;
pre1[b.s][b.t]=a;
if(b.t==p)
{
i=b.s;
j=b.t;
break;
}
q.push(b);
}
}
print(i,j);
}
void read(){
// ifstream cin("in.txt");
int i,j,k;
while(cin>>n>>m>>p)
{
solve();
cout<<"success"<<endl;
}
}
int main(){
read();
return 0;
}
#include<fstream>
#include<queue>
using namespace std;
int n,m,p;
struct node{
int s,t;
};
int pre[1001][1001];
node pre1[1001][1001];
int v[1001][1001];
void print(int s,int t){
int i,j,k;
if(pre[s][t]!=-1)
{
print(pre1[s][t].s,pre1[s][t].t);
if(pre[s][t]==1)
cout<<"fill A"<<endl;
if(pre[s][t]==2)
cout<<"fill B"<<endl;
if(pre[s][t]==3)
cout<<"empty A"<<endl;
if(pre[s][t]==4)
cout<<"empty B"<<endl;
if(pre[s][t]==5)
cout<<"pour B A"<<endl;
if(pre[s][t]==6)
cout<<"pour A B"<<endl;
}
}
void solve(){
int i,j,k;
node a;
a.s=0;
a.t=0;
queue<node> q;
q.push(a);
pre[0][0]=-1;
memset(v,0,sizeof(v));
v[0][0]=1;
while(!q.empty())
{
a=q.front();
q.pop();
node b;
b.s=n;
b.t=a.t;
if(v[b.s][b.t]==0)
{
v[b.s][b.t]=1;
pre[b.s][b.t]=1;
pre1[b.s][b.t]=a;
if(b.t==p)
{
i=b.s;
j=b.t;
break;
}
q.push(b);
}
b.t=m;
b.s=a.s;
if(v[b.s][b.t]==0)
{
v[b.s][b.t]=1;
pre[b.s][b.t]=2;
pre1[b.s][b.t]=a;
if(b.t==p)
{
i=b.s;
j=b.t;
break;
}
q.push(b);
}
b.s=0;
b.t=a.t;
if(v[b.s][b.t]==0)
{
v[b.s][b.t]=1;
pre[b.s][b.t]=3;
pre1[b.s][b.t]=a;
if(b.t==p)
{
i=b.s;
j=b.t;
break;
}
q.push(b);
}
b.s=a.s;
b.t=0;
if(v[b.s][b.t]==0)
{
v[b.s][b.t]=1;
pre[b.s][b.t]=4;
pre1[b.s][b.t]=a;
if(b.t==p)
{
i=b.s;
j=b.t;
break;
}
q.push(b);
}
b.s=min(n,a.s+a.t);
b.t=a.t-min(n,a.s+a.t)+a.s;
if(v[b.s][b.t]==0)
{
v[b.s][b.t]=1;
pre[b.s][b.t]=5;
pre1[b.s][b.t]=a;
if(b.t==p)
{
i=b.s;
j=b.t;
break;
}
q.push(b);
}
b.s=a.s-min(m,a.s+a.t)+a.t;
b.t=min(m,a.s+a.t);
if(v[b.s][b.t]==0)
{
v[b.s][b.t]=1;
pre[b.s][b.t]=6;
pre1[b.s][b.t]=a;
if(b.t==p)
{
i=b.s;
j=b.t;
break;
}
q.push(b);
}
}
print(i,j);
}
void read(){
// ifstream cin("in.txt");
int i,j,k;
while(cin>>n>>m>>p)
{
solve();
cout<<"success"<<endl;
}
}
int main(){
read();
return 0;
}