codevs1226 倒水问题 bfs
来源:互联网 发布:国外社交软件排名 编辑:程序博客网 时间:2024/05/17 09:10
题目描述 Description
有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水。设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水也可以相互倾倒。已知 x 升壶为空 壶, y 升壶为空壶。问如何通过倒水或灌水操作, 用最少步数能在x或y升的壶中量出 z ( z ≤ 100 )升的水 来。
输入描述 Input Description
一行,三个数据,分别表示 x,y 和 z;
输出描述 Output Description
一行,输出最小步数 ,如果无法达到目标,则输出"impossible"
样例输入 Sample Input
3 22 1
样例输出 Sample Output
14
#include<iostream>#include<queue>#include<cstring>#define pii pair<int,int>using namespace std;int vis[101][101],step;int bfs(int x,int y,int z){if(z==0) return 0;if(x==z||y==z) return 1;memset(vis,-1,sizeof(vis));queue<pii> Q;pii t=make_pair(0,0),tt;Q.push(t);vis[0][0]=0;while(!Q.empty()){t=Q.front();step=vis[t.first][t.second];Q.pop();tt.first=x,tt.second=t.second;//fill 1if(vis[tt.first][tt.second]==-1){Q.push(tt);vis[tt.first][tt.second]=step+1;}tt.first=t.first,tt.second=y;//fill 2if(vis[tt.first][tt.second]==-1){Q.push(tt);vis[tt.first][tt.second]=step+1;}tt.first=0,tt.second=t.second;//empty 1if(vis[tt.first][tt.second]==-1){Q.push(tt);vis[tt.first][tt.second]=step+1;}tt.first=t.first,tt.second=0;//empty 2if(vis[tt.first][tt.second]==-1){Q.push(tt);vis[tt.first][tt.second]=step+1;}if(t.first+t.second<=x){//2 to 1 tt.first=t.first+t.second,tt.second=0;if(vis[tt.first][tt.second]==-1){if(tt.first==z) return step+1;Q.push(tt);vis[tt.first][tt.second]=step+1;}}else{tt.first=x,tt.second=t.second+t.first-x;if(vis[tt.first][tt.second]==-1){if(tt.second==z) return step+1;Q.push(tt);vis[tt.first][tt.second]=step+1;}}if(t.first+t.second<=y){//1 to 2tt.second=t.first+t.second,tt.first=0;if(vis[tt.first][tt.second]==-1){if(tt.second==z) return step+1;Q.push(tt);vis[tt.first][tt.second]=step+1;}}else{tt.second=y,tt.first=t.second+t.first-y;if(vis[tt.first][tt.second]==-1){if(tt.first==z) return step+1;Q.push(tt);vis[tt.first][tt.second]=step+1;}}}return -1;}int main(){ios::sync_with_stdio(false);cin.tie(0);int x,y,z;cin>>x>>y>>z;int ans=bfs(x,y,z);if(ans==-1)cout<<"impossible"<<endl;elsecout<<ans<<endl;return 0;}
1 0
- codevs1226 倒水问题 bfs
- 【codevs1226】倒水问题,BFS练习
- 【codevs1226】倒水问题 宽搜
- 水杯倒水问题 bfs
- 20130421.4 倒水问题(BFS)
- UVA10603 倒水问题 BFS
- pots 倒水问题(bfs)
- 7.5.2倒水问题(BFS)
- poj 3414 倒水问题 bfs
- hdu1495 bfs解决倒水问题
- 算法学习-倒水问题(bfs)
- (转载)BFS 倒水问题 HDU 1495倒水问题
- POJ 3414 Pots(BFS倒水问题)
- poj 3414 Pots [bfs - 倒水问题]
- 10603 - Fill,倒水问题 bfs解
- POJ 3414 Pots【bfs模拟倒水问题】
- POJ 3414 Pots【bfs模拟倒水问题】
- POJ3414 模拟倒水问题 BFS记录路径
- css --关于背景图片显示不出来的情况
- STL标准模版库---set操作
- log4j.properties配置与加载应用
- JS验证表单集合大全
- Oracle中用exp/imp命令参数详解
- codevs1226 倒水问题 bfs
- leetcode25~Reverse Nodes in k-Group
- JMeter学习(一)工具简单介绍
- 浏览器的一个请求从发送到返回都经历了什么,讲的越详细越好
- 旋转打印矩阵
- JavaScript函数集合大全
- 89. Gray Code
- 94. Binary Tree Inorder Traversal
- 深入剖析Tomcat 第四章 默认连接器