POJ 3414 Pots(模拟bfs+路径记录)
来源:互联网 发布:武汉美工培训 编辑:程序博客网 时间:2024/04/29 17:19
题意:给出两个容积分别为 a 和 b 的pot,按照以下三种操作方式,求出能否在一定步数后,使者两个pot的其中一个的水量为c。 1.FILL(i):将i pot倒满水。 2.DROP(i):将i pot倒空水。 3.POUR(i,j): 将i pot的水倒到j pot上,直至要么i pot为空,要么j pot为满。
思路:bfs求解,六种状态,并记录路径
AC代码如下:
#include<cstdio>#include<queue>#include<vector>#include<cstring>#include<algorithm>using namespace std;const int maxn=100+5;struct node{int a,b;int type; //1(FILL(1))、2(FILL(2))、3(DROP(1))、4(DROP(2))、5(POUR(1,2)) 、6(POUR(2,1)) node(int a=0,int b=0,int type=0):a(a),b(b),type(type){}}ns;int d[maxn][maxn];node path[maxn][maxn]; //保存路径 int A,B,C;void print(node nd){vector<node>vec;while(true){vec.push_back(nd);if(d[nd.a][nd.b]==0)break ;nd=path[nd.a][nd.b];}for(int i=vec.size()-1;i>=0;i--){node nt=vec[i];switch(nt.type){case 1:printf("FILL(1)\n");break;case 2:printf("FILL(2)\n");break;case 3:printf("DROP(1)\n");break;case 4:printf("DROP(2)\n");break;case 5:printf("POUR(1,2)\n");break;case 6:printf("POUR(2,1)\n");}}}void bfs(){memset(d,-1,sizeof(d));queue<node>q;q.push(ns);d[ns.a][ns.b]=0;while(!q.empty()){node u=q.front();q.pop();if(u.a==C||u.b==C){printf("%d\n",d[u.a][u.b]);print(u);return ;}for(int i=1;i<=6;i++){ //六种状态的判定 node v;if(i==1){ //FILL(1)v.a=A;v.b=u.b;v.type=1;}else if(i==2){ // FILL(2)v.b=B;v.a=u.a;v.type=2;}else if(i==3){ //DROP(1)v.a=0;v.b=u.b;v.type=3;}else if(i==4){ //DROP(2)v.b=0;v.a=u.a;v.type=4;}else if(i==5){ //POUR(1,2)int min1=min(u.a,B-u.b);v.a=u.a-min1;v.b=u.b+min1;v.type=5;}else { //POUR(2,1)int min1=min(u.b,A-u.a);v.b=u.b-min1;v.a=u.a+min1;v.type=6;}if(d[v.a][v.b]==-1){q.push(v);d[v.a][v.b]=d[u.a][u.b]+1;path[v.a][v.b]=u;}}}printf("impossible\n");}int main(){while(scanf("%d%d%d",&A,&B,&C)==3){ bfs();}return 0;}
1 0
- POJ 3414 Pots(模拟bfs+路径记录)
- 【POJ 3414】 Pots (bfs + 模拟 + 路径记录)
- POJ 3414 Pots【BFS+记录路径】
- poj 3414 Pots (bfs+路径记录)
- POJ 3414 Pots(BFS记录路径)
- POJ 3414 Pots (BFS + 记录路径)
- poj-3414-Pots【BFS+记录路径】
- poj 3414 Pots (BFS + 记录路径)
- POJ 3414 Pots(bfs+路径记录)
- poj Pots(BFS)(路径记录)(模拟)
- poj 3414 pots -- 最爱的 BFS (记录路径)
- POJ 3414 Pots (BFS记录最短路径)
- POJ 3414 Pots【bfs模拟倒水问题】
- POJ 3414 Pots【bfs模拟倒水问题】
- POJ-3414-Pots(BFS 模拟)
- POJ 3414-Pots(BFS-模拟倒水)
- POJ 3414 Pots ( BFS , 打印路径 )
- POJ 3414--Pots(BFS+回溯路径)
- SSM框架
- iOS设计模式-责任链模式
- Dubbo分布式服务框架入门(附工程)
- 迈出使用Docker的第一步,学习第一个Docker容器
- Senparc.Weixin.MP 微信公众平台开发教程(1) 微信信息处理
- POJ 3414 Pots(模拟bfs+路径记录)
- 四种常见的 POST 提交数据方式
- C# WinForm 中ComboBox数据绑定的问题
- 51nod 1346 递归
- 基于maven使用IDEA创建多模块项目
- GitHub新手使用指南
- 微信小程序开发之https从无到有
- CMS收集器
- 钓鱼新套路:自动检查受害者输入的帐号密码是否真实