码迷,mamicode.com
首页 > 其他好文 > 详细

BFS/poj 3414 pots

时间:2014-12-08 00:44:04      阅读:235      评论:0      收藏:0      [点我收藏+]

标签:style   blog   io   color   os   sp   for   on   div   

#include<cstdio>
#include<queue>
#include<cstring>
using namespace std;
struct point
{
    int a,b;
    int step;
    int way[110];
};
int aa,bb,cc;
int v[110][110];
void bfs()
{
    memset(v,0,sizeof(v));
    queue<point>que;
    point now,next;
    now.a=0;
    now.b=0;
    now.step=0;
    v[0][0]=true;
    que.push(now);
    while (!que.empty())
    {
        now=que.front();
        que.pop();
        if (now.a==cc || now.b==cc)
        {
            printf("%d\n",now.step);
            for (int i=1;i<=now.step;i++)
            {
                if (now.way[i]==1) printf("FILL(1)\n");
                if (now.way[i]==2) printf("FILL(2)\n");
                if (now.way[i]==3) printf("DROP(1)\n");
                if (now.way[i]==4) printf("DROP(2)\n");
                if (now.way[i]==5) printf("POUR(1,2)\n");
                if (now.way[i]==6) printf("POUR(2,1)\n");
            }
            return ;
        }
        //FILL A 111111111
        if (now.a!=aa)
        {
            next=now;
            next.a=aa;
            next.b=now.b;
            if (!v[next.a][next.b])
            {
                v[next.a][next.b]=1;
                next.step=now.step+1;
                next.way[next.step]=1;
                que.push(next);
            }
        }

        //FILL B 2222222222
        if (now.b!=bb)
        {
            next=now;
            next.a=now.a;
            next.b=bb;
            if (!v[next.a][next.b])
            {
                v[next.a][next.b]=1;
                next.step=now.step+1;
                next.way[next.step]=2;
                que.push(next);
            }
        }

        //DROP A 3333333333
        if (now.a!=0)
        {
            next=now;
            next.a=0;
            next.b=now.b;
            if (!v[next.a][next.b])
            {
                v[next.a][next.b]=1;
                next.step=now.step+1;
                next.way[next.step]=3;
                que.push(next);
            }
        }

        //DROP B 444444444444
        if (now.b!=0)
        {
            next=now;
            next.a=now.a;
            next.b=0;
            if (!v[next.a][next.b])
            {
                v[next.a][next.b]=1;
                next.step=now.step+1;
                next.way[next.step]=4;
                que.push(next);
            }
        }

        //pour(1,2)  5555555555555
        if (now.a!=0)
        {
            if (now.a>=bb-now.b)  //a 倒满 b
            {
                next=now;
                next.a=now.a-(bb-now.b);
                next.b=bb;
                if (!v[next.a][next.b])
                {
                    v[next.a][next.b]=1;
                    next.step=now.step+1;
                    next.way[next.step]=5;
                    que.push(next);
                }
            }else if (now.a<bb-now.b)   //a 空了  没倒满 b
            {
                next=now;
                next.a=0;
                next.b=now.b+now.a;
                if (!v[next.a][next.b])
                {
                    v[next.a][next.b]=1;
                    next.step=now.step+1;
                    next.way[next.step]=5;
                    que.push(next);
                }
            }
        }

        //POUR(2,1)  6666666666666
        if (now.b!=0)
        {
            if (now.b>=aa-now.a)
            {
                next=now;
                next.a=aa;
                next.b=now.b-(aa-now.a);
                if (!v[next.a][next.b])
                {
                    v[next.a][next.b]=1;
                    next.step=now.step+1;
                    next.way[next.step]=6;
                    que.push(next);
                }
            }else if (now.b<aa-now.a)
            {
                next=now;
                next.a=now.a+now.b;
                next.b=0;
                if (!v[next.a][next.b])
                {
                    v[next.a][next.b]=1;
                    next.step=now.step+1;
                    next.way[next.step]=6;
                    que.push(next);
                }
            }
        }

    }
    printf("impossible\n");
}
int main()
{
    scanf("%d%d%d",&aa,&bb,&cc);
    bfs();
    return 0;
}

 

BFS/poj 3414 pots

标签:style   blog   io   color   os   sp   for   on   div   

原文地址:http://www.cnblogs.com/NicoleLam/p/4150123.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!