UVa:571 Jugs
来源:互联网 发布:vmware mac镜像下载 编辑:程序博客网 时间:2024/05/16 09:28
题意:给你两个给定容积的桶,无限量的水,要求你输出倒出指定容积水的步骤。
思路:bfs+剪枝。一定要判重,否则会RE。递归打印步骤。
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>#include <queue>using namespace std;struct State{ int x[3],id;};struct Path{ int user,op,pre,id;};Path p[1000000];int X[3],N;bool vis[1005][1005],ok;void Fill(int &a,int &b,int A,int B){ if(a+b<=B) { b=a+b; a=0; } else { a=a+b-B; b=B; }}void Judge(State ss){ if(ss.x[1]==N||ss.x[2]==N) ok=true;}void Print_path(Path pth){ if(pth.op==1) { if(pth.user==1)puts("fill A"); else puts("fill B"); } else if(pth.op==2) { if(pth.user==1)puts("empty A"); else puts("empty B"); } else if(pth.op==3) { if(pth.user==1)puts("pour A B"); else puts("pour B A"); }}void Out_put(Path pth){ if(pth.id==0) return; Out_put(p[pth.pre]); Print_path(pth);}int main(){ while(scanf("%d%d%d",&X[1],&X[2],&N)!=EOF) { State st; memset(vis,0,sizeof(vis)); int _id=0; st.x[1]=st.x[2]=st.id=0; p[_id].pre=-1; p[_id].id=_id++; queue<State> q; q.push(st); ok=false; while(!q.empty()&&!ok) { State tmp=q.front(); q.pop(); for(int i=1; i<=2&&!ok; ++i) { for(int j=1; j<=3&&!ok; ++j) //1 倒满 2 倒空 3 倒到另一个中 { State t=tmp; if(j==1) { if(tmp.x[i]==X[i]) continue; t.x[i]=X[i]; } else { if(!tmp.x[i]==X[i]) continue; if(j==2) t.x[i]=0; else if(j==3) { if(i==1) Fill(t.x[1],t.x[2],X[1],X[2]); else Fill(t.x[2],t.x[1],X[2],X[1]); } } if(vis[t.x[1]][t.x[2]]) continue; else { vis[t.x[1]][t.x[2]]=true; t.id=_id; p[_id].pre=tmp.id; p[_id].user=i; p[_id].op=j; p[_id].id=_id; _id++; q.push(t); } Judge(t); } } } Out_put(p[_id-1]); puts("success"); } return 0;}
- uva 571 jugs
- UVA 571 Jugs
- UVa:571 Jugs
- UVA - 571 Jugs
- uva 571 - Jugs
- UVa 571 - Jugs (数论)
- UVa 571 - Jugs
- Jugs - UVa 571 bfs
- UVA - 571 Jugs
- uva 571 Jugs
- ZOJ 1005 - Jugs | UVA 571 - Jugs
- UVa 571 Jugs (想法题)
- uva 571 - Jugs(倒水问题)
- UVA 571 Jugs(经典倒水问题)
- 571 - Jugs
- UVA - 571 - Jugs (数论 - 经典倒水问题)
- Jugs
- Jugs
- 关于多线程中代理的一个小例子
- 视图
- node-mongo-native1.3.19连接mongo的最优方法
- Java面向对象
- 用coffeescript 进行web开发
- UVa:571 Jugs
- sscanf函数与sscanf_s函数
- memcpy和memmove函数
- 排序算法实现 C/C++
- pfile spfile静态和动态修改配置参数
- 关于多线程中异步代理的一个小例子
- 数据挖掘之分类
- python network programming tutorial
- TJU Happy 2004