C/C++知识点之C++经典题——三个水杯
小标 2018-12-03 来源 : 阅读 2410 评论 0

摘要:本文主要向大家介绍了C/C++知识点之C++经典题——三个水杯,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

本文主要向大家介绍了C/C++知识点之C++经典题——三个水杯,通过具体的内容向大家展示,希望对大家学习C/C++知识点有所帮助。

最近复习了一下宽搜,感觉其实搜索是一种精神,而这种精神就是不怕困难走到底,掌握这种精髓能很好地帮助您解决一些需要举例子的问题。

今天找了一道题,比较值得学习,希望通过这道题了解宽搜的套路。
顺便附上题目:
三个水杯
时间限制:1000 ms | 内存限制:65535 KB难度:4 描述给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算。现在要求你写出一个程序,使其输出使初始状态到达目标状态的最少次数。 输入第一行一个整数N(0<N<50)表示n组测试数据接下来每组测试数据有两行,第一行给出三个整数v1 v2="" v3="" v1="">V2>V3 V1<100 v3="">0)表示三个水杯的体积。第二行给出三个整数E1 E2 E3 (体积小于等于相应水杯体积)表示我们需要的最终状态输出每行输出相应测试数据最少的倒水次数。如果达不到目标状态输出-1样例输入26 3 14 1 19 3 27 1 1样例输出3-1
 
附上AC代码详解,可能看起来有点繁琐,其实并没有你想象中那么难,要理解,三个杯子互相倒水有6种情况!相信您能理解!#include#include#include#includeusing namespace std;struct node{ //结构体表示倒水过程中的状态  int a,b,c; int step; //step表示到当前这个状态所需要的步骤数 }b,e; //b、e分别表示开始状态和目标状态 int v1,v2,v3;bool f[105][105][105]; //f(flag)表示三个杯子的这种状态是否讨论过,可以判重                       //宽搜其他题比如要用hash值也是为了避免重复判断状态,节省时间 
int bfs(node b){ queue q; //一般宽搜都用队列实现  q.push(b); f[b.a][b.b][b.c]=true;  node cur; while (!q.empty()) //6种倒水情况 :耐心,其实懂了一个其他都可以复制粘贴加一点小修改  {  cur=q.front();  if (cur.a==e.a && cur.b==e.b && cur.c==e.c) //搜索到了就返回,也算个剪枝    return cur.step;  q.pop();    if (cur.a>0 && cur.b0 && cur.c0 && cur.a0 && cur.c0 && cur.a0 && cur.b>n; while (n--) //多次询问  {  cin>>v1>>v2>>v3;  b.a=v1; b.b=0; b.c=0; b.step=0; //初始化   cin>>e.a>>e.b>>e.c; //目标状态  memset(f,0,sizeof(f)); //每次都要将标记清零,故放在循环里  if (v1!=e.a+e.b+e.c) //因为这样是肯定找不到的   cout<<"-1"<<endl;  else cout<<bfs(b)<<endl; //否则宽搜 } return 0;}

本文由职坐标整理并发布,希望对同学们有所帮助。了解更多详情请关注职坐标编程语言C/C+频道!

本文由 @小标 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程