广度优先搜索,用数组记录到达过的状态

Mother's Milk

Farmer John has three milking buckets of capacity A, B, and C liters. Each of the numbers A, B, and C is an integer from 1 through 20, inclusive. Initially, buckets A and B are empty while bucket C is full of milk. Sometimes, FJ pours milk from one bucket to another until the second bucket is filled or the first bucket is empty. Once begun, a pour must be completed, of course. Being thrifty, no milk may be tossed out.

Write a program to help FJ determine what amounts of milk he can leave in bucket C when he begins with three buckets as above, pours milk among the buckets for a while, and then notes that bucket A is empty.
PROGRAM NAME: milk3
INPUT FORMAT

A single line with the three integers A, B, and C.
SAMPLE INPUT (file milk3.in)

8 9 10

OUTPUT FORMAT

A single line with a sorted list of all the possible amounts of milk that can be in bucket C when bucket A is empty.
SAMPLE OUTPUT (file milk3.out)

1 2 8 9 10

SAMPLE INPUT (file milk3.in)

2 5 10

SAMPLE OUTPUT (file milk3.out)

5 6 7 8 9 10

/* ID: xdzhbin1 LANG: C++ TASK: milk3 */ #include <fstream> using namespace std; int A,B,C; //三个杯子的容量 int min(int n1, int n2) //返回两个数中较小的一个 { return n1>n2 ? n2 : n1; } void pull(int a, int b, int c, bool m[][21][21], bool cup[21]) { if(a==0) cup[c] = true; //a为空时,记录c中的牛奶量 int vol; if(a>0&&b<B) //A向B倒 { vol = min(a,B-b); //能倒的牛奶量 if(!m[a-vol][b+vol][c]) //未到过倒完之后的状态 { m[a-vol][b+vol][c] = true; //记录这个状态 pull(a-vol,b+vol,c,m,cup); //从这个状态开始,广搜,倒牛奶 } } if(a>0&&c<C) //A向C倒 { vol = min(a,C-c); if(!m[a-vol][b][c+vol]) { m[a-vol][b][c+vol] = true; pull(a-vol,b,c+vol,m,cup); } } if(b>0&&a<A) //B向A倒 { vol = min(b,A-a); if(!m[a+vol][b-vol][c]) { m[a+vol][b-vol][c] = true; pull(a+vol,b-vol,c,m,cup); } } if(b>0&&c<C) //B向C倒 { vol = min(b,C-c); if(!m[a][b-vol][c+vol]) { m[a][b-vol][c+vol] = true; pull(a,b-vol,c+vol,m,cup); } } if(c>0&&a<A) //C向A倒 { vol = min(c,A-a); if(!m[a+vol][b][c-vol]) { m[a+vol][b][c-vol] = true; pull(a+vol,b,c-vol,m,cup); } } if(c>0&&b<B) //C向B倒 { vol = min(c,B-b); if(!m[a][b+vol][c-vol]) { m[a][b+vol][c-vol] = true; pull(a,b+vol,c-vol,m,cup); } } } int main() { ifstream in("milk3.in",ios::in); ofstream out("milk3.out",ios::out); bool milks[21][21][21]; //记录状态是否到达过,如milks[0][0][0]表示三个杯子中的牛奶都为零的状态 bool ccup[21]; //输出结果,也就是A空时,C中的牛奶量 int i,j,k; //初始化状态信息 for(i=0; i<21; i++) for(j=0; j<21; j++) for(k=0; k<21; k++) milks[i][j][k] = false; for(i=0; i<21; i++) ccup[i] = false; in>>A>>B>>C; //读入容量 int c = C; //C中的牛奶量 milks[0][0][c] = true; ccup[c] = true; pull(0,0,c,milks,ccup); bool space = false; for(i=0; i<21; i++) { if(ccup[i]) { if(space) out<<" "; out<<i; space = true; } } out<<endl; return 0; }

1.4 milk3 倒牛奶相关推荐

  1. [科技部与你共成长] 倒牛奶

    农夫John有三个装牛奶的桶,容量分别为A.B.C,数字A.B.C是1到15的整数,开始时A桶.B桶为空,C桶装满牛奶.农夫John装牛奶从一个桶倒向另一个桶,直到该桶为空或另一个桶满为止,一个倒牛奶 ...

  2. 论如何科学地倒牛奶~

    假期的小编,是不存在什么早饭的.每天10点多起床的小编一般都是来杯牛奶当作早(午)饭. 倒牛奶的小编 只不过有一天不知道为何,倒牛奶的时候溅到了桌子上好多,小编以迅雷不及掩耳之势,将桌子清理干净了(防 ...

  3. hloj#168“倒牛奶”解题讨论

    题目描述 农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数. 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,约翰把牛奶从一个桶倒到另一个桶中,直到被灌桶装满或原桶空了 ...

  4. 递归一题总结(OJ P1117倒牛奶)

    题目:                    农民约翰有三个容量分别是A,B,C升的桶,A,B,C分别是三个从1到20的整数, 最初,A和B桶都是空的,而C桶是装满牛奶的.有时,约翰把牛奶从一个桶倒到 ...

  5. 2015年2月2日 奶农倒牛奶的背后

    郎教授说: 2014年12月份开始起,新疆山东山西河北北京都发现奶农倒奶的问题 中国人均的喝奶量是32.4公斤,只是世界平均的1/3 中国是市场是4000W吨,也就是哈有8000W吨的潜力 2007年 ...

  6. 【隐式图搜索遍历学习】倒牛奶

    DFS: #include<iostream> #include<queue> #include<algorithm> #include<cstring> ...

  7. 当年资本家倒掉牛奶,到底是怎么回事?

    1.那么现在房子严重过剩,房地产开发商即不降价也不推倒,又怎么解释? 2.人家说的是资本家倒掉牛奶,养殖户就是资本家啊!谁说过中间商倒牛奶了. 3.如果免费送给人喝,喝出问题,比如肚子疼,你赔的起吗? ...

  8. 青你3倒奶,蒙牛装小白花?

    文/琥珀消研社 作者/白露 桃厂.蒙牛道歉了,事儿就这么结束了? "倒牛奶"事件时隔百年再次上演,5月4日,桃厂<青春有你>因此被停播: 5月6日晚上,桃厂正式发文道歉 ...

  9. AcWing 1714.混合牛奶

    AcWing 1714.混合牛奶 题目链接 题目描述: 农业,尤其是生产牛奶,是一个竞争激烈的行业. Farmer John 发现如果他不在牛奶生产工艺上有所创新,他的乳制品生意可能就会受到重创! 幸 ...

最新文章

  1. 网络推广外包中如何让网络推广外包专员充分运用网站的市场价值?
  2. vim的代码折叠:设置默认代码不折叠
  3. 如何在阿里云上运行SAP UI5应用
  4. 面经——嵌入式软件工程师ARM体系与架构相关
  5. 英语期末复习unit 1-2课后习题第一题及背诵段落
  6. qtcreator摄像头显示时间_三星Galaxy S11 +渲染器展现出巨大的相机凹凸和四边形曲面显示...
  7. jQuery本身方法($.each,$.map,$.contains,$ajax)
  8. Python 图片与字符串互转
  9. 小数加分数怎样计算讲解_反渗透阻垢剂的加药量怎样计算?
  10. 莫比乌斯带catia建模_用sw2018制作莫比乌斯环图文教程
  11. 4个基本不等式的公式高中_写作 | 高中英语作文4个高分写作技巧
  12. 49. PHP 页面静态化(2)
  13. window远程桌面连接实现连接他人电脑=》mstsc
  14. 注意!黑客可以通过CSS3功能攻击浏览器
  15. 联想计算机不能使用ghost,如何解决联想台式机不能重装系统
  16. 基于linkboy+GD32编程实现多种屏幕显示效果(LCD1602、LCD12864、彩屏)
  17. k2p H大老毛子 padavan 2月20日固件
  18. c# MD5加密
  19. Dreamweaver CS4 快捷键大全
  20. hpet 定时器中断 8259 linux,[OSDEV]编程高精度定时器(HPET)

热门文章

  1. 初识C语言 | C语言零基础入门(第一天)
  2. 随机的UserAgent对付某反爬虫网站
  3. 安卓开发— —仿微信界面(二)
  4. outlook邮件撤回操作
  5. 消费者运营-阿里系三大模型
  6. 脉冲神经网络克服了类脑计算的硬件障碍,让AI更节能
  7. 联想台式电脑硬盘分区失败数据恢复
  8. 常用增强学习实验环境 II (ViZDoom, Roboschool, TensorFlow Agents, ELF, Coach等)
  9. unity 碰撞检测的四种检测模式
  10. Godaddy域名申请及设置