poj 3414 bfs+记录路劲

来源:互联网 发布:淘宝网电脑版登录 怎么 编辑:程序博客网 时间:2024/03/29 05:39

水题///复制粘贴时候忘记改数字wa了2次  真是蠢

ACcode:

#include <iostream>#include <cstdio>#include <queue>#include <cstring>using namespace std;struct N{    queue<string>ans;    int x,y;    int st;};int vis[105][105];int main(){    int x,y,c;    while(scanf("%d%d%d",&x,&y,&c)!=EOF){        memset(vis,0,sizeof(vis));        queue<N>q;        int flag=1;        N now,next;        now.x=0;        now.y=0;        now.st=0;        q.push(now);        while(!q.empty()){            now=q.front();            q.pop();            if(now.x==c||now.y==c){                cout<<now.st<<'\12';                while(!now.ans.empty()){                    cout<<now.ans.front()<<'\12';                    now.ans.pop();                }                flag=0;                break;            }            if(now.x==0){                next.x=x;                next.y=now.y;                next.st=now.st+1;                next.ans=now.ans;                next.ans.push("FILL(1)");                if(!vis[next.x][next.y]){                    q.push(next);                    vis[next.x][next.y]=1;                }            }            if(now.y==0){                next.x=now.x;                next.y=y;                next.st=now.st+1;                next.ans=now.ans;                next.ans.push("FILL(2)");                if(!vis[next.x][next.y]){                    q.push(next);                    vis[next.x][next.y]=1;                }            }            next.x=0;            next.y=now.y;            next.st=now.st+1;            next.ans=now.ans;            next.ans.push("DROP(1)");            if(!vis[next.x][next.y]){                q.push(next);                vis[next.x][next.y]=1;            }            next.x=now.x;            next.y=0;            next.st=now.st+1;            next.ans=now.ans;            next.ans.push("DROP(2)");            if(!vis[next.x][next.y]){                q.push(next);                vis[next.x][next.y]=1;            }            if(now.x+now.y<=y){                next.x=0;                next.y=now.x+now.y;                next.st=now.st+1;                next.ans=now.ans;                next.ans.push("POUR(1,2)");                if(!vis[next.x][next.y]){                    q.push(next);                    vis[next.x][next.y]=1;                }            }else {                next.x=now.x+now.y-y;                next.y=y;                next.st=now.st+1;                next.ans=now.ans;                next.ans.push("POUR(1,2)");                if(!vis[next.x][next.y]){                    q.push(next);                    vis[next.x][next.y]=1;                }            }            if(now.x+now.y<=x){                next.x=now.x+now.y;                next.y=0;                next.st=now.st+1;                next.ans=now.ans;                next.ans.push("POUR(2,1)");                if(!vis[next.x][next.y]){                    q.push(next);                    vis[next.x][next.y]=1;                }            }else {                next.x=x;                next.y=now.x+now.y-x;                next.st=now.st+1;                next.ans=now.ans;                next.ans.push("POUR(2,1)");                if(!vis[next.x][next.y]){                    q.push(next);                    vis[next.x][next.y]=1;                }            }        }        if(flag)puts("impossible");    }    return 0;}


0 0
原创粉丝点击