POJ 3414

来源:互联网 发布:优化农业产业结构 编辑:程序博客网 时间:2024/05/17 14:19

如此水的一道题目话了我一下午。。。。。真心但疼,不过即使过了我还是不明白我在加入队列的时候会标记现在的状态但是为毛从队列中拿出来的时候他的状态就没被标记呢?

就这个地方RE了一下午。。。

#include<stdio.h>#include<string.h>struct queue{    int num,water1,water2,d,step;};struct queue q[1000000];void print(queue p){    if(p.num!=-1) print(q[p.num]);    if(p.num!=-1){        if(p.d==0){            printf("FILL(1)\n");        }        if(p.d==1){            printf("FILL(2)\n");        }        if(p.d==2){            printf("DROP(1)\n");        }        if(p.d==3){            printf("DROP(2)\n");        }        if(p.d==4){            printf("POUR(1,2)\n");        }        if(p.d==5){            printf("POUR(2,1)\n");        }    }    return ;}int main(){    int yes,front,push;    int a,b,target;    int judge[105][105];    while(scanf("%d%d%d",&a,&b,&target)!=EOF){        memset(judge,0,sizeof(judge));        yes=0;       /* if(target>a&&target>b){            printf("impossible\n");            continue;        }*/        q[0].num=-1;        q[0].water1=0;        q[0].water2=0;        q[0].d=0;        q[0].step=0;        judge[0][0]=1;        front=-1;        push=1;        while(front!=push){            //printf("yes\n");            queue p=q[++front];            judge[p.water1][p.water2]=1;//真心不加这句话就直接RE了 。。我实在是入队的时候标记了啊啊啊啊啊 真但疼            for(int i=0;i<6;i++){                queue s;                if(i==0){                    if(p.water1<a&&judge[a][p.water2]==0){                        s.water1=a;                        s.water2=p.water2;                        s.num=front;                        s.d=i;                        s.step=p.step+1;                        q[push]=s;                        push++;                        judge[s.water1][s.water2]==1;//好吧 我卖盟了 两个等号                    }                }                if(i==1){                    if(p.water2<b&&judge[p.water1][b]==0){                        s.water1=p.water1;                        s.water2=b;                        s.num=front;                        s.d=i;                        s.step=p.step+1;                        q[push]=s;                        push++;                        judge[s.water1][s.water2]==1;                    }                }                if(i==2){                    if(p.water1>0&&judge[0][p.water2]==0){                        s.water1=0;                        s.water2=p.water2;                        s.num=front;                        s.d=i;                        s.step=p.step+1;                        q[push]=s;                        push++;                         judge[s.water1][s.water2]==1;                    }                }                if(i==3){                    if(p.water2>0&&judge[p.water1][0]==0){                        s.water1=p.water1;                        s.water2=0;                        s.num=front;                        s.d=i;                        s.step=p.step+1;                        q[push]=s;                        push++;                         judge[s.water1][s.water2]==1;                    }                }                if(i==4){                    if(p.water1>0&&p.water2<b){                        if((b-p.water2)>p.water1&&judge[0][p.water1+p.water2]==0){                            s.water1=0;                            s.water2=p.water1+p.water2;                            s.num=front;                            s.d=i;                            s.step=p.step+1;                            q[push]=s;                            push++;                             judge[s.water1][s.water2]==1;                        }                        if((b-p.water2)<=p.water1&&judge[p.water1+p.water2-b][b]==0){                            s.water1=p.water1-(b-p.water2);                            s.water2=b;                            s.num=front;                            s.d=i;                            s.step=p.step+1;                            q[push]=s;                            push++;                             judge[s.water1][s.water2]==1;                        }                    }                }                if(i==5){                    if(p.water1<a&&p.water2>0){                        if((a-p.water1)>p.water2&&judge[p.water1+p.water2][0]==0){                            s.water1=p.water1+p.water2;                            s.water2=0;                            s.num=front;                            s.d=i;                            s.step=p.step+1;                            q[push]=s;                            push++;                             judge[s.water1][s.water2]==1;                        }                        if((a-p.water1)<=p.water2&&judge[a][p.water2+p.water1-a]==0){                            s.water1=a;                            s.water2=p.water2-(a-p.water1);                            s.num=front;                            s.d=i;                            s.step=p.step+1;                            q[push]=s;                            push++;                             judge[s.water1][s.water2]==1;                        }                    }                }                if(s.water1==target||s.water2==target){                //printf("yesweq\n");                    printf("%d\n",s.step);                    yes=1;                    print(s);                    break;                }            }            if(yes==1) break;        }        if(yes==0){            printf("impossible\n");        }    }    return 0;}


0 0
原创粉丝点击