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;
}

posted on 2011-07-07 19:12  宇宙吾心  阅读(249)  评论(0)    收藏  举报

导航