pots (P3414)

来源:互联网 发布:杭州创业软件出差 编辑:程序博客网 时间:2024/05/16 18:35

题意:给空两个容量A,B的杯具,

         求使用一些操作后能倒出C容量的水

        操作:1,把其中一个倒满水,

                    2,把其中一个水倒掉

                    3,把其中一个杯具的水倒向另一个杯具里,如果水满了还没有倒完,则水保留在原来的杯具中


思路:简单的BFS,

          1,用一个二维矩阵记录访问状态

          2,记录每个状态点的操作

          3,记录每个状态点的上个位置。



#include<iostream>#include<queue>using namespace std;int a,B,c;struct my{int x,y; };bool b[101][101];int pre[101][101];my p[101][101];int num=0;//1: fill 1  2: fill 2  3: out 1 4: out 2 5: 1->2  6: 2->1 void put(int x,int y){if (!x && !y)return ;put(p[x][y].x,p[x][y].y);switch (pre[x][y]){case 1: puts("FILL(1)");break;case 2: puts("FILL(2)");break;case 3: puts("DROP(1)");break;case 4: puts("DROP(2)");break;case 5: puts("POUR(1,2)");break;case 6: puts("POUR(2,1)");break;}}void put_num(int x,int y){if (!x && !y){printf("%d\n",num);return ;}num++;put_num(p[x][y].x,p[x][y].y);}int main(){int i,j,k;cin>>a>>B>>c;queue<my> q;my d;my cur;memset(b,false,sizeof(b));d.x=0;d.y=0;q.push(d);my ans;ans.x=-1;b[0][0]=true;while (!q.empty()){d=q.front();q.pop();if (d.x==c || d.y==c){ans=d;break;}if (d.x<a){cur.x=a;cur.y=d.y;if (!b[cur.x][cur.y]){b[cur.x][cur.y]=true;q.push(cur);pre[cur.x][cur.y]=1;p[cur.x][cur.y]=d;}}if (d.y<B){cur.x=d.x;cur.y=B;if (!b[cur.x][cur.y]){b[cur.x][cur.y]=true;q.push(cur);pre[cur.x][cur.y]=2;p[cur.x][cur.y]=d;}}if (d.x){cur.x=0;cur.y=d.y;if (!b[cur.x][cur.y]){b[cur.x][cur.y]=true;q.push(cur);pre[cur.x][cur.y]=3;p[cur.x][cur.y]=d;}}if (d.y){cur.x=d.x;cur.y=0;if (!b[cur.x][cur.y]){b[cur.x][cur.y]=true;q.push(cur);pre[cur.x][cur.y]=4;p[cur.x][cur.y]=d;}}if (d.x && d.y<B){if (B-d.y>=d.x)cur.x=0,cur.y=d.y+d.x;elsecur.x=d.x-(B-d.y),cur.y=B;if (!b[cur.x][cur.y]){b[cur.x][cur.y]=true;q.push(cur);pre[cur.x][cur.y]=5;p[cur.x][cur.y]=d;}}if (d.x<a && d.y){if (a-d.x>=d.y)cur.x=d.x+d.y,cur.y=0;elsecur.x=a,cur.y=d.y-(a-d.x);if (!b[cur.x][cur.y]){b[cur.x][cur.y]=true;q.push(cur);pre[cur.x][cur.y]=6;p[cur.x][cur.y]=d;}}}if (ans.x!=-1)put_num(ans.x,ans.y),put(ans.x,ans.y);elseputs("impossible");return 0;}

http://poj.org/problem?id=3414

原创粉丝点击