题目描述:
http://acm.nyist.net/JudgeOnline/problem.php?pid=21

给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算。现在要求你写出一个程序,使其输出使初始状态到达目标状态的最少次数。

输入
第一行一个整数N(0<N<50)表示N组测试数据
接下来每组测试数据有两行,第一行给出三个整数V1 V2 V3 (V1>V2>V3 V1<100 V3>0)表示三个水杯的体积。
第二行给出三个整数E1 E2 E3 (体积小于等于相应水杯体积)表示我们需要的最终状态
输出
每行输出相应测试数据最少的倒水次数。如果达不到目标状态输出-1
样例输入
2
6 3 1
4 1 1
9 3 2
7 1 1
样例输出
3
-1

题目分析:

经典题目,bfs搜索,不用回溯,直接暴力即可。

AC代码:


/***bfs,隐式图的搜索*/
#include<iostream>
#include<cstdio>
#include<map>
#include<cstring>
#include<string>
#include<algorithm>
#include<queue>
#include<vector>
#include<stack>
#include<cstdlib>
#include<cctype>
#include<cstring>
#include<cmath>
using namespace std;
int vis[101][101][101];//记录是否被访问
struct StateNode{int cur[3];//记录当前状态int v[3];//记录状态int step;//步数
};
queue<StateNode> q;
int Sucess(StateNode a,StateNode b){//比较是否相等return (a.cur[0] == b.cur[0] && a.cur[1] == b.cur[1] && a.cur[2] == b.cur[2]);
}
int main()
{int t,res;StateNode b,e;cin>>t;while(t--){res=-1;while(!q.empty()){//清空队列q.pop();}cin>>b.v[0]>>b.v[1]>>b.v[2];//下面开始模拟倒水,并搜索b.cur[0]=b.v[0];//首先先给最大的水杯倒满水b.cur[1]=b.cur[2]=0;//小杯子为0b.step=0;//记录步数cin>>e.cur[0]>>e.cur[1]>>e.cur[2];int ok=0;//记录是否可以到达结尾状态memset(vis,0,sizeof(vis));q.push(b);//加入队列vis[b.cur[0]][b.cur[1]][b.cur[2]]=1;//已经在访问或者已经访问while(!q.empty()){//进行广搜StateNode u=q.front();//cout<<u.cur[0]<<" "<<u.cur[1]<<" "<<u.cur[2]<<endl;q.pop();if(Sucess(u,e)){//成功并结束res=u.step;break;}//else 模拟倒水for(int i=0;i<=2;i++){//用每一个被子给其他两个被子倒水for(int j=0;j<=2;j++){if(i!=j){int minv=u.v[j]-u.cur[j];//从当前状态到被子倒满,需要的水if(u.cur[i]<minv){//当前的水小于需要的水,则能用的水变为当前的水minv=u.cur[i];}//出现新节点StateNode v=u;v.cur[i]-=minv;//必须先减去v.cur[j]+=minv;v.step=u.step+1;//更新步数//cout<<u.step<<endl;if(!vis[v.cur[0]][v.cur[1]][v.cur[2]]){//该结点没有被访问q.push(v);//加入队列vis[v.cur[0]][v.cur[1]][v.cur[2]]=1;//已访问}}}}}cout<<res<<endl;}return 0;
}

NYOJ21 三个水杯 (经典问题 bfs)相关推荐

  1. nyoj21 三个水杯

    nyoj21 三个水杯 时空限制    1000ms/128MB 题目描述: 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识,只能根据 ...

  2. NYoj21 三个水杯

    三个水杯 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没 ...

  3. [ACM_NYOJ_21]三个水杯(BFS广度优先搜索)

    三个水杯 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识,只 ...

  4. nyoj 21 三个水杯 BFS

    三个水杯 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识 ...

  5. pwn学习总结(三) —— 栈溢出经典题型整理

    pwn学习总结(三) -- 栈溢出经典题型整理 ret2text ret2shellcode rop ret2libc 使用DynELF实现远程libc泄露 ret2syscall ret2libc ...

  6. C语言求最小公倍数和最大公约数三种算法(经典)

    C语言求最小公倍数和最大公约数三种算法(经典) 最小公倍数:数论中的一种概念,两个整数公有的倍数成为他们的公倍数,其中一个最小的公倍数是他们的最小公倍数,同样地,若干个整数公有的倍数中最小的正整数称为 ...

  7. 第三种是经典著作阅读法

    第三种是经典著作阅读法,这种方法用来阅读哲学.经济.军事和古典著作.阅读这些著作要象读文学作品一样的慢,但读者的眼睛经常离开书本,对书中的一字一句都细加思索,捕捉作者的真正的用意.从而理解其中的深奥的 ...

  8. 【第三弹】经典移植至IOS端、经典合集

    这次整合的都是一些经典的.App Store已经下架的.比较耐玩的游戏 然后就是有发现很多同学下载完之后有的不需要ID验证就能直接运行,有的却又要ID验证,且验证了还是不行 可能是因为自身的系统原因? ...

  9. 《金字塔原理》麦肯锡三十年经典培训教材

    <金字塔原理>麦肯锡三十年经典培训教材 转载:https://wenku.baidu.com/view/a8a43ce4a2116c175f0e7cd184254b35eefd1ab6.h ...

  10. 案例:丁三石挑战经典歌剧

    案例:丁三石挑战经典歌剧 出品:网易 亮点: 策划上,视频类,这是网易公司为宣传网易CC直播2017年度盛典所打造的一款宣传H5,横屏播放.①Loading完毕,进入首页,是一个餐厅的场景,点击屏幕右 ...

最新文章

  1. R语言使用ggplot2包使用geom_dotplot函数绘制分组点图(添加均值、中位数)实战(dot plot)
  2. R语言警告:Cannot compute exact p-value with ties的处理方法
  3. 并发模型之——基本概念
  4. JSsearch实现在购物网站输入后推荐联想的效果
  5. linux mint 18 mysql_linux mint下mysql中文支持问题
  6. 左手价格战右手结盟 巨头加码云计算市场洗牌在即
  7. Mysql读写锁保姆级图文教程
  8. 全国计算机等级英语一级考试,全国计算机等级考试职业英语一级考试大纲
  9. easyui打开新的选项卡_Jquery Easyui选项卡组件Tab使用详解(10)
  10. zabbix 监控mysql模板_Zabbix监控MYSQL模板-阿里云开发者社区
  11. 毕业论文LaTeX模板
  12. 使用IDEA反编译class文件
  13. 2021年中青杯 B题 港珠澳车辆通行(详细解题思路)
  14. css修改文字竖排还是横排
  15. 微信小程序独立服务器的好处,微信小程序的优势和缺点
  16. 2022年Unity 面试题 |五萬字 二佰道| Unity面试题大全,面试题总结【全网最全,收藏一篇足够面试】
  17. 农夫过河狼羊白菜Java开放封闭_农夫过河——狼羊菜问题
  18. 学习什么技术 4年后最赚钱
  19. go微服务框架go-micro
  20. 【AI语音】华为EC6110M、Q21AQ、Q21C部分EC6110T、EC6110U_海思3798MV310_通刷_卡刷固件

热门文章

  1. 在fedora上使用Deepin推出的GNOME Shell扩展
  2. 非系统盘硬盘的初始化
  3. Jetson TX2 +ubuntu18.04 Azure kinect Dk的配置流程(2)libfreenect的安装过程
  4. 免费节假日api 分享 十月一加班工资怎么算
  5. 模块三、修改存款、提款方法
  6. 远程访问及控制——ssh
  7. 22年应届毕业生1076万人,这个香饽饽还有人不知道?
  8. python selenium 点击按钮 无效_使用Python绑定,Selenium WebDriver click()有时不起作用。...
  9. Windows 7 Service Pack 1 2020-01更新简体中文镜像
  10. 2019/9/28_codewars自虐_play_with_digits