问题描述

给你两个容器(容量分别为A, B)、一台饮水机 ,问是否能够经过
有限的步骤倒水,得到容量为 C 的水

解决方案

  • 对于每一种状态,都有以下几种转移方式:
    1. A倒入B
    2. B倒入A
    3. A倒空/满
    4. B倒空/满
  • 可以转移到不同的状态。 对于每一种状态,我们需要记录是否已经被访问过了(BFS的过程)

代码

#include <bits/stdc++.h>
using namespace std;struct Status
{int a, b;bool operator<(const Status &s) const {return a!=s.a ? a<s.a : b<s.b;}
};
queue<Status> Q;
map<Status, Status> from;/* 递归输出方案 */
void print(Status &p)
{if ( from.find(p) == from.end() || (p.a == 0&&p.b==0) ){printf("<%d,%d>",  p.a, p.b);return;}print(from[p]); // 递归printf("-><%d,%d>",  p.a, p.b);
}void refresh(Status &s, Status &t)
{if ( from.find(t) == from.end() ) { // 特判合法,加入队列from[t] = s;Q.push(t);}
}void bfs(int A, int B, int C)
{// 起点, 两杯水都空Status s,t; s.a=0; s.b=0; Q.push(s);while (!Q.empty()) {// 取队首s = Q.front(); Q.pop();// 特判到达终点if (s.a == C || s.b == C) {print(s); // 输出方案return;}// 倒空 a 杯的水if (s.a > 0) {t.a = 0;  // 倒空t.b = s.b;// b 杯不变refresh(s, t);}// 同理,倒空 b 杯的水if (s.b > 0) {t.b = 0;  // 倒空t.a = s.a;// a 杯不变refresh(s, t);}// a 杯未满,续满 a 杯if (s.a < A) {// 续满 a 杯t.a = A;  t.b = s.b;refresh(s, t);// 考虑倒入if (s.b != 0) {if (s.a + s.b <= A) {t.a = s.a + s.b;t.b = 0;refresh(s, t);} else {t.a = A;t.b = s.a + s.b - A;refresh(s, t);}}}// 同理,b 杯未满,续满 b 杯if (s.b < B) {t.a = s.a;t.b = B;refresh(s, t);if (s.a != 0) {if (s.a + s.b <= B) {t.a = 0;t.b = s.a + s.b;refresh(s, t);} else {t.a = s.a + s.b - B;t.b = B;refresh(s, t);}}}}printf("-1\n");
}
int main()
{int a, b, c; scanf("%d%d%d", &a, &b, &c);bfs(a, b, c);return 0;
}/* 26 29 11 */

【算法】倒水游戏(BFS|C++)相关推荐

  1. java 寻路算法_游戏中的寻路算法解析

    游戏角色的自动寻路,已经是游戏中一个历史比较悠久的领域,较为成熟也有很多种实现.这里摘录一句后面所提的参考资料中的描述:"业内AI开发者中有一句话:"寻路已不是问题."我 ...

  2. 数据结构与算法——广度搜索BFS

    目录 模板 542.01矩阵 529.扫雷游戏 2146.价格范围内最高排名的k样物品 模板 542.01矩阵 class Solution:def updateMatrix(self, matrix ...

  3. 蒙特卡罗算法在游戏(围棋)AI中的应用

    我是在 aigamedev.com 上的2008年第17周的 RoundUp 里看到这篇文章的推荐的,出于自己对中国象棋及其计算机博弈方面的兴趣,虽然对于围棋和围棋AI一窃不通,但还是挺仔细地阅读了这 ...

  4. 帧锁定算法解决游戏同步

    帧锁定算法解决游戏同步 早期 RTS,XBOX360 LIVE游戏常用同步策略是什么?格斗游戏多人联机如何保证流畅性和一致性?如何才能像单机游戏一样编写网游?敬请观看<帧锁定同步算法> & ...

  5. 利用 Yolo V3 算法对游戏进行目标检测(DNF 为例)

    本 Chat 分享了 Python 及深度学习过程中的一个实战案例,详细讲述了利用目标检测算法识别游戏关键信息的实现过程. 本 Chat 不重复算法原理讲解,主要讲述编程思路,具体包括: 基于 Lab ...

  6. 算法与游戏实战技术之刀光拖尾实现

    笔者介绍:姜雪伟,IT公司技术合伙人,IT高级讲师,CSDN社区专家,特邀编辑,畅销书作者,国家专利发明人;已出版书籍:<手把手教你架构3D游戏引擎>电子工业出版社和<Unity3D ...

  7. 排序算法在游戏中的应用,你确定你了解吗?(详细的图解带你实战)

    排序算法在游戏中的应用,你确定你了解吗?(详细的图解带你实战) 目录 排序算法在游戏中的应用,你确定你了解吗?(详细的图解带你实战) 1. 归并排序 1.1 作为一种典型的分而治之思想的算法应用,归并 ...

  8. 算法与游戏实战技术-姜雪伟-专题视频课程

    算法与游戏实战技术-5404人已学习 课程介绍         游戏开发者需要具有能解决实际问题的能力也就是算法能力.这需要开发者能将算法与实际项目开发完美的结合起来.算法是支撑项目开发的灵魂,在游戏 ...

  9. 关联规则算法在游戏行业中的应用

    关联规则算法在游戏行业中的应用 本文为学习<R语言游戏数据分析与挖掘>学习笔记. Apriori算法应用广泛,可用于消费市场价格分析,猜测顾客的消费习惯,比如较有名的"尿布和啤酒 ...

最新文章

  1. Zabbix邮件报警设置方法
  2. leetcode 233 number of digit one
  3. 复制(主从复制、读写分离)
  4. 体验XHProf(linux版本)
  5. 影之刃3服务器维护,影之刃3手游2021年3月11日维护公告_影之刃3手游2021年3月11日更新了什么_玩游戏网...
  6. docker启动redis并使用java连接
  7. Arcgis Server开发使用query报错
  8. 联机交易场景持续拓展,巨杉数据库中标吉林省农信
  9. 光洋触摸屏和PLC通讯错误2225
  10. 【python基础】windows下python环境版本更新教程
  11. iframe嵌入的页面只能在iframe中跳转显示问题以及高度自适应内容问题
  12. 计算机二级c语言2019年3月,2019年3月计算机二级
  13. JSR303和拦截器
  14. hue-登录相关-简
  15. uva 10306 e-coins【dp】
  16. APP加密,ios代码混淆工具,虚拟化技术 适用于移动应用程序的虚拟化加密软件
  17. chrom浏览器模拟手机访问
  18. python操作ymal文件之PyYAML库的使用
  19. LSTM长短期记忆网络
  20. 电脑连接蓝牙耳机声音总是断断续续:

热门文章

  1. ArduPilot开源飞控系统之简单介绍
  2. 最新天龙八部环境-GS环境教程-【长期稳定版本】+ 视频教程
  3. 普通话测试软件哪个不要钱,普通话测试软件哪个好_普通话测试软件靠谱吗_不要钱的普通话测试软件...
  4. 2021计组和微计-背下来就能拿分的知识总结
  5. SWFObject 使用 范例版~~~
  6. 在vue项目中引入JQuery
  7. IBM PC机是一台什么计算机,PC机是什么类型的计算机
  8. 写bug的日常——KeyError错误原因
  9. FOC电机控制,出售一份基于国产M0核MCU平台
  10. JSP+Servlet+Mysql企业财务管理系统设计与实现(附论文)