poj 1606 Jugs (BFS)

来源:互联网 发布:淘宝男裤店铺推荐 编辑:程序博客网 时间:2024/05/15 12:07

题目链接:http://poj.org/problem?id=1606

bfs+路径保存。

#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;struct node{    int a[2],f,pre;}q[1001*1001];int vis[1001][1001];int a,b,c;void way(int f){    if(f==1)    printf("fill A\n");    else if(f==2)    printf("fill B\n");    else if(f==3)    printf("pour A B\n");    else if(f==4)    printf("pour B A\n");    else if(f==5)    printf("empty A\n");    else if(f==6)    printf("empty B\n");    else if(f==7)    printf("success\n");}void Print(int t){    if(t!=-1)    {        Print(q[t].pre);        way(q[t].f);    }}void bfs(){    int front=0,rear=1;    int i,j;    q[front].a[0]=q[front].a[1]=0;    q[front].f=q[front].pre=-1;    while(front!=rear)    {        if(q[front].a[1]==c)        {            q[rear].f=7;            q[rear].pre=front;            Print(rear);            break;        }        if(q[front].a[0]==0&&!vis[a][q[front].a[1]])        {            q[rear].a[0]=a;            q[rear].a[1]=q[front].a[1];            q[rear].f=1;            vis[a][q[front].a[1]]=1;            q[rear++].pre=front;        }        if(q[front].a[1]==0&&!vis[q[front].a[0]][b])        {            q[rear].a[0]=q[front].a[0];            q[rear].a[1]=b;            q[rear].f=2;            vis[q[front].a[0]][b]=1;            q[rear++].pre=front;        }        if(q[front].a[0]!=0&&!vis[0][q[front].a[1]])        {            q[rear].a[0]=0;            q[rear].a[1]=q[front].a[1];            q[rear].f=5;            q[rear++].pre=front;            vis[0][q[front].a[1]]=1;        }        if(q[front].a[1]!=0&&!vis[q[front].a[0]][0])        {            q[rear].a[1]=0;            q[rear].a[0]=q[front].a[0];            q[rear].f=6;            q[rear++].pre=front;            vis[q[front].a[0]][0]=1;        }        if(q[front].a[0]>0)        {            int t=q[front].a[0]+q[front].a[1];            q[rear].a[0]=(t-b<0)?0:t-b;            q[rear].a[1]=t<b?t:b;            if(!vis[q[rear].a[0]][q[rear].a[1]])            {                q[rear].f=3;                vis[q[rear].a[0]][q[rear].a[1]]=1;                q[rear++].pre=front;            }        }        if(q[front].a[1]>0)        {            int t=q[front].a[0]+q[front].a[1];            q[rear].a[1]=(t-a<0)?0:t-a;            q[rear].a[0]=t<a?t:a;            if(!vis[q[rear].a[0]][q[rear].a[1]])            {                q[rear].f=4;                vis[q[rear].a[0]][q[rear].a[1]]=1;                q[rear++].pre=front;            }        }        front++;    }}int main(){    while(scanf("%d%d%d",&a,&b,&c)!=EOF)    {        memset(vis,0,sizeof(vis));        bfs();    }    return 0;}


原创粉丝点击