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
- pots (P3414)
- (杯子倒水问题)Pots(p3414)
- Pots
- Pots
- Pots
- Pots
- Pots
- Pots
- pots
- pots
- Pots
- Pots
- Pots
- Pots
- Pots
- Pots
- Pots
- Pots
- JS继承之巧用call()方法
- 如何安装中文破解sublime
- pb热键捕捉
- Jtable 排序,清空的报ArrayIndexOutOfBoundsException问题
- 安装sql server 2008 management,提示错误:此计算机上安装了 Microsoft Visual Studio 2008 的早期版本。请在安装 SQL Server 2008 前
- pots (P3414)
- Storm简介
- 数据库索引的作用和优点缺点
- hadoop2.2下载
- git不常用但好用分支管理命令
- 如何查看和设置weblogic的编码格式
- hdu 4334 Trouble(哈希)
- SPOJ DQUERY 入门主席树
- js如何监听滚动条滚动事件,使得某个标签内容始终位于同一位置