codevs 1226 倒水问题
1226 倒水问题
有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水。设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水也可以相互倾倒。已知 x 升壶为空 壶, y 升壶为空壶。问如何通过倒水或灌水操作, 用最少步数能在x或y升的壶中量出 z ( z ≤ 100 )升的水 来。
一行,三个数据,分别表示 x,y 和 z;
一行,输出最小步数 ,如果无法达到目标,则输出"impossible"
3 22 1
14
枚举八种可能情况进行bfs
注意要判重
#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
int n;int m,z; struct miku{
int x;int y,step;
}cur,nxt; queue<miku>que; bool can(int x,int y)
{
if(x>=&&y>=&&x<=n&&y<=m)
return ;
return ;
} int ans;
bool vis[][];
void bfs(int x,int y)
{
cur.x=x;cur.y=y;cur.step=;
que.push(cur);
while(!que.empty())
{
cur=que.front();
que.pop();
for(int i=;i<=;i++)
{
int next_x,next_y;
if(i==)next_x=,next_y=cur.y+cur.x;//x->y倒空
else if(i==)next_x=cur.x+cur.y,next_y=;//y->x倒空
else if(i==)next_x=n,next_y=cur.y;//倒满x
else if(i==)next_x=cur.x,next_y=m;//倒满y
else if(i==)next_x=,next_y=cur.y;//清空x
else if(i==)next_x=cur.x,next_y=;//清空y
else if(i==)next_x=n,next_y=cur.y-(n-cur.x);//y->x不倒空
else if(i==)next_x=cur.x-(m-cur.y),next_y=m;//x->y不倒空
if(can(next_x,next_y))
if(next_x==z||next_y==z)
{
ans=cur.step+;
return ;
}
if(can(next_x,next_y)&&!vis[next_x][next_y])
{
vis[next_x][next_y]=;
nxt.x=next_x;
nxt.y=next_y;
nxt.step=cur.step+;
que.push(nxt);
}
}
}
}
int main()
{
scanf("%d%d%d",&n,&m,&z);
bfs(,);
if(ans!=)
printf("%d",ans);
else printf("impossible");
return ;
}
codevs 1226 倒水问题的更多相关文章
- CodeVS 1226 倒水问题【DFS/BFS】
题目描述 Description 有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水.设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水 ...
- 洛谷P1432 倒水问题(CODEVS.1226)
To 洛谷.1432 倒水问题 题目背景 In the movie "Die Hard 3", Bruce Willis and Samuel L. Jackson were co ...
- 广度优先搜索 cdoevs 1226 倒水问题
cdoevs 1226 倒水问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有两个无刻度标志的水壶,分别可装 x 升 ...
- 倒水问题 (codevs 1226) 题解
[问题描述] 有两个无刻度标志的水壶,分别可装x升和y升 ( x,y 为整数且均不大于100)的水.设另有一水缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水也可以相互倾倒.已知x升壶为空壶, ...
- [Wikioi 1226]倒水问题
题目描写叙述 Description 有两个无刻度标志的水壶.分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水. 设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶 ...
- 【CODEVS】倒水问题
题目描述: 有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水.设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水也可以相互倾倒.已知 ...
- Codevs 1497 取余运算== 洛谷P 1226
时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 输入b,p,k的值,编程计算bp mod k的值.其中的b,p,k*k ...
- codevs 3289 花匠
题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
随机推荐
- 《JavaScript 实战》:Tween 算法及缓动效果
Flash 做动画时会用到 Tween 类,利用它可以做很多动画效果,例如缓动.弹簧等等.我这里要教大家的是怎么利用 Flash 的 Tween 类的算法,来做js的Tween算法,并利用它做一些简单 ...
- 导出数据excel表--身份证号后三位是0--〉还原
导出数据excel表的身份证号后三位是0,怎么办? 数据导出前,在身份证号前加任意符号即可 例如: 结果
- 【洛谷 P4542】 [ZJOI2011]营救皮卡丘(费用流)
题目链接 用最多经过\(k\)条经过\(0\)的路径覆盖所有点. 定义\(ds[i][j]\)表示从\(i\)到\(j\)不经过大于\(max(i,j)\)的点的最短路,显然可以用弗洛伊德求. 然后每 ...
- notepad++突然崩溃,保存的文件没了怎么办
在C:\Users\你当前用户的用户名\AppData\Roaming\Notepad++\backup 有备份
- GO-指针与函数
一.指针类型 1.普通类型,变量存的就是值,也叫值类型.指针类型存的是地址 2.获取变量的地址,用&,比如:var a int, 获取a的地址 &a 3.指针类型,变量存的是一个地址, ...
- 64_p5
php-nette-bootstrap-2.4.3-1.fc26.noarch.rpm 20-Feb-2017 07:19 16290 php-nette-caching-2.5.3-1.fc26.n ...
- 在Linux上安装pycharm
1.首先在官网下载pycharm并进行提取,将提取的文件夹放在/usr下面(或者任意位置) 2.然后vi /etc/hosts 编辑 将0.0.0.0 account.jetbrains.com添加到 ...
- URL中斜杠/和反斜杠\的区别小结
Unix使用斜杆/ 作为路径分隔符,而web应用最新使用在Unix系统上面,所以目前所有的网络地址都采用 斜杆/ 作为分隔符. Windows由于使用 斜杆/ 作为DOS命令提示符的参数标志了,为了不 ...
- Weex Workshop 挑战赛,等你来战!
一个颠覆性的移动开发方式,一个匠心打造的跨平台移动开发工具,一个后App时代的生产力解放者—Weex,针对App Native开发频繁发版和多端研发的痛点,H5开发的页面稳定性.性能体验等问题,提供了 ...
- Merge k Sorted Lists——分治与堆排序(需要好好看)
Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. 1 ...