倒水问题

总时间限制:
1000ms
内存限制:
65536kB
描述

有三个分别容量分别为a升、b升和c升的杯子(a>b>c>0,且b与c互质)。

a杯装满水,b与c均为空。

三个筒相互倒水且不准把水倒往三个筒之外。

请用最少的倒水次数,倒出d升水(任一杯中正好水量为d 即可),并输出倒水的过程。

输入
只有一行:a、b、c、d 四个整数。
输出
第一行为倒水过程的总步骤 N ,其后N行为倒水的过程;
若无解,则输出“No find”。
样例输入
10 7 3 4
样例输出
3
10 0 0
3 7 0
3 4 3
明显的广搜,这里把vector、queue、stack都用了一遍

#include <cstdio>
#include <queue>
#include <stack>
#include <vector>
#include <algorithm>
#include <iostream>
#include <cstdlib>
using namespace std;
//结构体
struct node
{int v[3];int f;
};
//全局变量
const int maxn=200+5;
int a,b,c,d;
bool tf[maxn][maxn];
int cap[3];
vector <node> vec;
bool isok(int i)
{return vec[i].v[0]==d||vec[i].v[1]==d||vec[i].v[2]==d;
}
void out(int i)
{int j;stack<int> sta;do{sta.push(i);if(vec[i].f!=i) i=vec[i].f;else break;}while(1) ;printf("%d\n",sta.size() );while(!sta.empty()){j=sta.top() ;sta.pop() ;printf("%d %d %d\n",vec[j].v[0],vec[j].v[1],vec[j].v[2]);}
}
void work(int a,int b,int c,int d)
{//初始化 for(int i=0;i<maxn;i++)for(int j=0;j<maxn;j++) tf[i][j]=false;vec.clear() ; //准备 queue<int> que;int curr,ii; cap[0]=a; cap[1]=b; cap[2]=c;node s;if(a<d) {printf("No find");return;}s.v[0]=a;s.v[1]=0;s.v[2]=0;s.f =0;vec.push_back(s); if(isok(0)){printf("1\n%d 0 0",a);return;}tf[a][0]=true;que.push(0);//开始while(!que.empty()){curr=que.front();que.pop() ;for(int i=0;i<3;i++)for(int j=0;j<3;j++){//i->j//  printf("** ");if(i==j||vec[curr].v[i]==0||vec[curr].v[j]==cap[j]) continue;//   printf("44 ");ii=min(cap[j]-vec[curr].v[j],vec[curr].v[i]);s.f =curr;for(int o=0;o<3;o++) s.v [o]=vec[curr].v[o];s.v[i]-=ii;s.v[j]+=ii;if(!tf[s.v[0]][s.v[1]]){tf[s.v[0]][s.v[1]]=true;vec.push_back(s); if(isok(vec.size()-1)){out(vec.size()-1);return;}que.push(vec.size() -1) ;}}}printf("No find");
}
int main()
{scanf("%d%d%d%d",&a,&b,&c,&d);work(a,b,c,d);return 0;
}

倒水问题题解(勿喷)相关推荐

  1. Pytorch 训练与测试时爆显存(cuda out of memory)的终极解决方案,使用cpu(勿喷)

    Pytorch 训练与测试时爆显存(cuda out of memory)的终极解决方案,使用cpu(勿喷) 参见了很多方法,都没有用. 简单点,直接把gpu设成-1

  2. (IT/互联网行业)你给自己当前的职位拼几分?(评分标准,个人看法,勿喷~)...

    常常有身边的关系好的朋友或网友.问如今我该不该跳槽的问题. 我一般给他们的答复你能给当前的工作拼几分. 下面是我自己总结的一个评分标准.如有不当之处,勿喷~ --------------------- ...

  3. 【接箱子2.0】新手划过,dalao勿喷

    [接箱子2.0]新手划过,dalao勿喷 哈喽,本喵这个萌新又回来啦!(^_^) 这次前前后后优化了好多次代码,终于- 我的代码突破80行啦! 开心 ------------------------- ...

  4. 深度学习---人脸检测(勿喷)

    所谓人脸检测,就是给定任意一张图片,找到其中是否存在一个或多个人脸,并返回图片中每个人脸的位置和范围.自动人脸检测技术是所有人脸影像分析衍生应用的基础. 人脸检测大致分为两种方案:一是刚性模板(rig ...

  5. numpy的学习,全是源码,勿喷

    numpy的学习,全是源码,勿喷 文章目录 numpy的学习,全是源码,勿喷 基础学习 array的操作 numpy的运算 numpy的运算 基础学习 import numpy as np# # 核心 ...

  6. 新手小白开始学习verilog(学习方法有点歪门邪道的,大佬勿喷( ̄▽ ̄)“)

    新手小白开始学习verilog(学习方法有点歪门邪道的,大佬勿喷( ̄▽ ̄)") #一. 编译环境安装 我用的是Quaters,不会装的话我推荐正点原子的教程爱学习的万能B站 ##二. 基本知 ...

  7. 2018年第九届蓝桥杯省赛C/C++ A组(蒻鸡自己写的,看不上勿喷,自己的一点想法)

    第一题 标题:分数 1/1 + 1/2 + 1/4 + 1/8 + 1/16 + -. 每项是前一项的一半,如果一共有20项, 求这个和是多少,结果用分数表示出来. 类似: 3/2 当然,这只是加了前 ...

  8. 论文答辩问题准备(学生水平,自己准备用的,不喜勿喷)

    论文答辩问题准备(学生水平,自己准备用的,不喜勿喷) 委婉回答不会的问题 1.您指出的错误确实存在,因能力所限,未能及时发现与改正,在今后的工作中将加以改正,感谢您的提醒. 2.不好意思,这个问题回去 ...

  9. WEB安全基础简单总结(有些无序,大佬勿喷)

    WEB安全基础简单总结(有些无序,大佬勿喷) 文章目录 一.admin的url-utf8编码 二.协议变换 三.修改或添加HTTP请求头 四.nginx的配置文件所在位置 五.源码泄露 六.文件包含 ...

  10. 程序员观影有感--滚蛋吧,肿瘤君 (不喜勿喷)

    感谢CSDN这个对我来说超有感的平台,也许在别的平台像我这样在技术类博客上编写日记般的博客,早就给pass了,想想大家都是程序员,更懂得体谅别人了. 昨天七夕呢,身为程序员,想啥呢,叫上另一个程序员( ...

最新文章

  1. C#编程应用--线程与委托
  2. KNN分类器之NearestNeighbors详解及实践
  3. 程序员看过来!高通漏洞赏金最高1.5万美金
  4. 基于STM32对于三轴机械臂控制器设计
  5. python类中方法的执行顺序-python 函数或者类 代码的执行顺序
  6. [hiho1159] Poker
  7. 安卓系列转载,有时间可以参考学习
  8. 详解 Qt 串口通信程序全程图文 (2)
  9. 什么程序员最易找工作? 十大热门语言大汇集
  10. 软件测试功能测试全套常见面试题【开放性思维题】面试总结4-3
  11. SpringBoot---Tomcat日志配置
  12. CIS芯片测试到底怎么测?
  13. 取消计算机用户密码页面,取消开机密码 Windows电脑开机登录界面取消方法-电脑教程...
  14. 【vue开发基础】之使用阿里巴巴矢量图标库
  15. NPDP产品经理证书在中国有用吗?
  16. 软件测试理论与经验--阅读笔记
  17. Spring系列学习之Spring Cloud Contract测试消息传递
  18. 2014第六届华为创新杯编程大赛初赛解题报告
  19. Bugku CTF---清凉一夏
  20. 电子科大计算机学院张小松院长,电子科大网络空间安全研究中心主任张小松:网络安全产业有望成为成都新名片...

热门文章

  1. 程控电源CANoe上位机面板(CAN\ETH测试、RS232串口通信、编写设计思路)
  2. 【聚类算法】基于matlab划分法k-means聚类算法【含Matlab源码 1941期】
  3. js获取时间戳,将时间戳转换为年月日时分秒
  4. 北京大学,南下布局!
  5. uni-app实现PDF预览功能(避坑看这)
  6. CUDA入门教程;Transformer太火不是好事?;探求GPU极限性能的利器|AI系统前沿动态...
  7. 地理坐标系与投影坐标系的区别(转)
  8. Oracle索引基础
  9. (JAVA练习)输入一个四位数,各个位的数字相加
  10. Spyder输入中文后光标消失