题目描述:

有两个无刻度标志的水壶,分别可装
x 升和 y 升 ( x,y 为整数且均不大于 100 )的水。设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水也可以相互倾倒。已知 x 升壶为空 壶, y 升壶为空壶。问如何通过倒水或灌水操作, 用最少步数能在x或y升的壶中量出 z ( z ≤ 100 )升的水 来

输入描述:

一行,三个数据,分别表示
x,y 和 z;

输出描述:

一行,输出最小步数
,如果无法达到目标,则输出"impossible"

样例输入:

3
22 1

样例输出:

14

直接暴力掉。x倒入y中、y倒入z中、x倒空、z倒空、x倒满、y倒满六种大情况。

#include<cstdio>
#include<iostream>
#include<queue>
using namespace std;
int x,y,z; bool book[20000][20000]; struct v
{
int a,b,step;
bool operator()()
{
return a==z || b==z;
}
v(int c,int d,int e):a(c),b(d),step(e){};
};
queue<v> q; bool bfs()
{
v temp(0,0,0);
q.push(temp);
while(!q.empty())
{
int a,b,step;
temp=q.front();
q.pop();
if(temp())
{
cout<<temp.step;
return true;
}
a=temp.a;
b=temp.b;
step=temp.step;
for(int i=0;i<6;i++)
{
int q1,q2,q3;
if(i==0&&a!=x)q1=x,q2=b,q3=step+1;
else if(i==1&&b!=y)q1=a,q2=y,q3=step+1;
else if(i==2&&b<y&&a>0){
if(b+a>y) q1=a-y+b,q2=y,q3=step+1;
else q1=0,q2=b+a,q3=step+1;
}
else if(i==3&&a<x&&b>0){
if(a+b>x) q1=x,q2=b-x+a,q3=step+1;
else q1=b+a,q2=0,q3=step+1;
}
else if(i==4&&a>0) q1=0,q2=b,q3=step+1;
else if(i==5&&b>0) q1=a,q2=0,q3=step+1;
if(!book[q1][q2])
{
q.push(v(q1,q2,q3));
book[q1][q2]=true;
}
}
}
return false;
}
int main()
{
cin>>x>>y>>z;
if(!bfs())
cout<<"impossible";
return 0;
}

【CODEVS】倒水问题的更多相关文章

  1. 洛谷P1432 倒水问题(CODEVS.1226)

    To 洛谷.1432 倒水问题 题目背景 In the movie "Die Hard 3", Bruce Willis and Samuel L. Jackson were co ...

  2. 倒水问题 (codevs 1226) 题解

    [问题描述] 有两个无刻度标志的水壶,分别可装x升和y升 ( x,y 为整数且均不大于100)的水.设另有一水缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水也可以相互倾倒.已知x升壶为空壶, ...

  3. codevs 1226 倒水问题

    1226 倒水问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold   题目描述 Description 有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x, ...

  4. CodeVS 1226 倒水问题【DFS/BFS】

    题目描述 Description 有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水.设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水 ...

  5. codevs 3289 花匠

    题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...

  6. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  7. codevs 1285 二叉查找树STL基本用法

    C++STL库的set就是一个二叉查找树,并且支持结构体. 在写结构体式的二叉查找树时,需要在结构体里面定义操作符 < ,因为需要比较. set经常会用到迭代器,这里说明一下迭代器:可以类似的把 ...

  8. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  9. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

随机推荐

  1. 我王某的 低错&&(女装)Flag

    日月共鉴,人心同睹. 喜欢你. 喜欢你的眼睛. 春天银河般闪烁的双瞳.春日阳光般温柔的眼神. 喜欢你的头发. 在微风中飘拂丝绢般柔滑的长发. 喜欢你的嘴唇. 给我甜蜜的吻.吐出忧伤叹息的嘴唇. 喜欢你 ...

  2. vue-cli 目录结构详细讲解

    https://juejin.im/post/5c3599386fb9a049db7351a8 vue-cli 目录结构详细讲解 目录 结构预览 ├─build // 保存一些webpack的初始化配 ...

  3. PAT甲级——A1086 Tree Traversals Again

    An inorder binary tree traversal can be implemented in a non-recursive way with a stack. For example ...

  4. Activiti 接收任务活动

    流程中往往需要特定人接受任务并进行一定操作才能继续进行下去. 代码如下 import java.io.InputStream; import org.activiti.engine.ProcessEn ...

  5. PHP简单实现“相关文章推荐”功能的方法(此方法不是自创)

    1, 所用的函数:int similar_text ( string $first, string $second[, float $percent] ) 利用similar_text将这些文章标题同 ...

  6. Odoo Documentation : Recordsets

    Other recordset operations Recordsets are iterable(可迭代的) so the usual Python tools are available for ...

  7. Gartner首推机密计算:阿里云名列其中

    近日,全球信息技术研究机构Gartner发布了2019年云安全技术成熟度曲线报告(Gartner, Hype Cycle for Cloud Security, 2019, Jay Heiser, S ...

  8. Inoic 滚动条问题

    1.看图说话 2.没有超过一个页,怎样去掉图中的滚动条? 3修改后预览效果

  9. 19-10-26-F

    ZJ一下: T1码了暴力但是并没有开出来身高的神奇性质…… T2打模拟,但是只摸了卅分 T3不会,码了一个测试点分治.10分 TJ一下: T1. 发现身高范围在$[140,200]$时,直接去重跑$\ ...

  10. 善用 NuGet 程序包管理器控制台

    每种集成开发环境都会提供扩展包的下载与安装,VS (微软可视化集成开发环境) 下的叫程序包管理控制台,我们把他叫做<牛干 程序包管理控制台>. 在 工具=>NuGet 程序包管理器= ...