Pots

给你两个容量分别为 A 升和 B 升的罐子。可以进行以下操作:

  1. FILL(i)        从水龙头向罐子 i(1 ≤ ≤ 2)灌满水;
  2. DROP(i)      把罐子 i 的水倒空;
  3. POUR(i,j)    从罐子 i 向罐子 j 倒水;此操作后,要么罐子 j 满了(罐子 i 可能还有水),要么罐子 i 空了(所有水都倒到罐子 j 里)。

编写一个程序,找出能使其中一个罐子中恰好有 C 升水的最短操作序列。

输入

第一行包含三个整数 AB 和 C。这些数都在 1 到 100 的范围内,且 C ≤ max(A,B)。

输出

输出的第一行必须包含操作序列的长度 K。接下来的 K 行分别描述一个操作。如果有多个最短长度的操作序列,输出其中任意一个。如果无法达到期望结果,输出文件的第一行必须包含单词 ‘impossible’。

示例

InputOutput
3 5 4
6
FILL(2)
POUR(2,1)
DROP(1)
POUR(2,1)
FILL(2)
POUR(2,1)

解题思路

本题有3总操作,但操作的对象不同,一共有6种不同操作,题目求最短显然用bfs搜索更好一点

我们在找到终点还要回溯其走过的点,这里可以在结构体里面增加一个变量记录是由哪个点来的

最后记得逆序输出答案

#include<stdio.h>
#include<string.h>
struct bbffss {int x;//横坐标int y;//纵坐标int f;//从哪个点来的int s;char str[15];
}q[10000005];
int a, b, c, k = 0, top = 0, sum = 0, flag = 0;
int book[101][101], m, n;
char str1[] = "FILL(0)";
char str2[] = "DROP(0)";
char str3[] = "POUR(0,0)";
char sy[100000][15];
void sss(int x, int y,int tail)
{switch (x){case 1:strcpy(q[tail].str, str1);q[tail].str[5] += y;break;case 2:strcpy(q[tail].str, str2);q[tail].str[5] += y;break;case 3:strcpy(q[tail].str, str3);if (y == 1){q[tail].str[5] += 1;q[tail].str[7] += 2;}else{q[tail].str[5] += 2;q[tail].str[7] += 1;}break;}
}
void bfs()
{int hard = 1, tail = 2, tx, ty;book[0][0] = 1;q[1].x = 0; q[1].y = 0;q[1].f = 0; q[1].s = 0;while (hard < tail){for (int j = 1; j <= 2; j++)//两种不同的操作对象{for (int i = 1; i <= 3; i++)//三种操作方式{//根据操作方式和对象的不同switch (i){case 1:if (j == 1){tx = a;ty = q[hard].y;}else{tx = q[hard].x;ty = b;}break;case 2:if (j == 1){tx = 0;ty = q[hard].y;}else{tx = q[hard].x;ty = 0;}break;case 3:m = q[hard].x;n = q[hard].y;if (j == 1){if (b - n >= m){tx = 0;ty = n + m;}else{tx = m - (b - n);ty = b;}}else{if (a - m >= n){tx = n + m;ty = 0;}else{tx = a;ty = n - (a - m);}}break;}if (book[tx][ty] == 1)continue;book[tx][ty] = 1;//标记存在这种情况//入队操作q[tail].x = tx; q[tail].y = ty;q[tail].f = hard; q[tail].s = q[hard].s + 1;sss(i, j, tail);if (tx == c || ty == c)//判断是否到达指定容量{int ff = tail;sum = q[tail].s;while (ff != 0){strcpy(sy[++top], q[ff].str);ff = q[ff].f;}flag = 1;return;}tail++;}}hard++;}
}
int main()
{scanf("%d %d %d", &a, &b, &c);//输入a,b,cbfs();//进行搜索if (flag == 1)//有答案进行输出{printf("%d\n", sum);for (int i = top - 1; i >= 1; i--)//逆序输出printf("%s\n", sy[i]);}else//没有答案printf("impossible\n");return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/756211.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

● 647. 回文子串 ● 516.最长回文子序列 ● 动态规划总结篇

● 647. 回文子串 1.dp数组含义。 之前的题目&#xff0c;差不多都是求什么就怎么定义dp数组&#xff0c;最后返回dp的最后一个元素。但是这里如果定义一维数组dp[i]是[0,i]范围的回文子串的个数的话&#xff0c;怎么根据dp[i-1]得到dp[i]&#xff1f;发现很难找到递归关系…

Linux之gcc_makefile

一、提要 1. 预处理&#xff08;进行宏替换) 2. 编译&#xff08;生成汇编) 3. 汇编&#xff08;生成机器可识别代码&#xff09; 4. 链接&#xff08;生成可执行文件或库文件) 五六十年代&#xff0c;我们编程大多是二进制编程&#xff0c;也就是使用打孔纸带喂给机器 再往后&…

118.Qt入门,实现一个图片查看软件

需要用到的控件 QLabelQLineEditQPushButton 需要实现的功能 打开目录选择图片显示图片的名字显示图片 QLabel基本用法 void setText(const QString &);//设置文本QString text() const;//获取文本void setPixmap(const QPixmap &);设置大小 使用父类QWidget的方法设置…

窗口函数(sample database classicmodels _No.8 )

窗口函数&#xff08;sample database classicmodels _No.8 &#xff09; 准备工作&#xff0c;可以去下载 classicmodels 数据库具体如下 点击&#xff1a;classicmodels 也可以去 下面我的博客资源下载 https://download.csdn.net/download/tomxjc/88685970 文章目录 窗口函…

什么品牌洗地机清洁效果最好?洗地机品牌十大排名:前四名口碑公认

有使用过洗地机的朋友&#xff0c;相信对此都深有感触&#xff0c;洗地机的一洗一吸&#xff0c;清洁效果非常棒&#xff0c;地面的污渍、垃圾、粉尘都坚持不了几秒钟&#xff0c;分分钟可以让家里地面焕然一新&#xff0c;简直不要太香。但是&#xff0c;洗地机那么多&#xf…

Unity类银河恶魔城学习记录11-2 p104 Inventoty源代码

此章节相对较难理解&#xff0c;有时间单独出一章讲一下 Alex教程每一P的教程原代码加上我自己的理解初步理解写的注释&#xff0c;可供学习Alex教程的人参考 此代码仅为较上一P有所改变的代码 【Unity教程】从0编程制作类银河恶魔城游戏_哔哩哔哩_bilibili InventoryItem.cs…

FMQL45 XADC

通过PL自带的XADC可以读写温度&#xff0c;电压等&#xff0c;但是总是读的不对。开始查找FM_QL_bsp里面少了一个部分就是pl&#xff01;添加&#xff0c;在ewp已经修改了&#xff0c;但是文件不存在&#xff0c;现在给补上了&#xff0c;有点奇怪&#xff0c;有的项目会自动生…

网络安全-护网行动1

1.什么事hvv行动 2021年攻击队伍 100队伍&#xff0c;不设定攻击路径&#xff0c;在不违法和不破坏防守单位的前提下可以使用任何工具&#xff0c;如社会工程、钓鱼等 攻击方&#xff1a; 又公安部提供统一的攻击平台&#xff0c;场景、规则 防守方&#xff1a;也有自己的平台…

Python入门(小白友好)

知识图谱 搭建环境 安装Python:Download Python | Python.org 安装PyCharm:Download PyCharm: The Python IDE for data science and web development by JetBrains 注意:专业版本是收费的,新手小白使用社区版(community)即可 创建第一个项目: 一些PyCharm的设置(也适用…

Linux之线程同步

目录 一、问题引入 二、实现线程同步的方案——条件变量 1、常用接口&#xff1a; 2、使用示例 一、问题引入 我们再次看看上次讲到的多线程抢票的代码&#xff1a;这次我们让一个线程抢完票之后不去做任何事。 #include <iostream> #include <unistd.h> #inc…

Java项目打包成Docker镜像

将项目打包成Docker镜像 将项目打包成Docker镜像的原因是可以在一台电脑的环境下模拟多台不同性能电脑响应高并发请求时候的表现。这里我们模拟半个CPU、一个CPU还有两个CPU的情况 在pom.xml文件中添加jib插件&#xff08;前提电脑安装了maven和Java 的 JDK才能成功完成编译&…

【Python操作基础】——变量操作

&#x1f349;CSDN小墨&晓末:https://blog.csdn.net/jd1813346972 个人介绍: 研一&#xff5c;统计学&#xff5c;干货分享          擅长Python、Matlab、R等主流编程软件          累计十余项国家级比赛奖项&#xff0c;参与研究经费10w、40w级横向 文…

OLLVM环境配置

虚拟机配置: 4g 40g 增加源 deb [archamd64] http://archive.ubuntu.com/ubuntu focal main universe安装cmake sudo apt-get install cmake -y安装gcc8 sudo apt-get install gcc-8 g-8 -y切换为默认版本 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/…

30.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-数据搜索功能

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 内容参考于&#xff1a;易道云信息技术研究院VIP课 上一个内容&#xff1a;29.数据推测功能…

01.Linked-List-Sort

1. 链表排序简介 在数组排序中&#xff0c;常见的排序算法有&#xff1a;冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序等。 而对于链表排序而言&#xff0c;因为链表不支持随机访问&#xff0c;访问链表后面的节点只能依…

富格林:曝光暗箱细节确保安全

富格林指出&#xff0c;当下在通胀压力被曝光增加的情况下&#xff0c;不少投资者开始有意识地通过黄金投资来抵御风险。但是对于新手投资者来说缺乏相应的交易安全知识&#xff0c;很容易落入交易的暗箱中。但事实上&#xff0c;市面上有很多暗箱已经被曝光&#xff0c;如果投…

Ubuntu Desktop - Desktop

Ubuntu Desktop - Desktop 1. Amazon2. Ubuntu Software3. Desktop4. 系统桌面快捷方式5. 用户桌面快捷方式References 1. Amazon Amazon -> Unlock from Launcher 2. Ubuntu Software Installed -> Games -> Remove 3. Desktop /home/strong/Desktop 4. 系统桌面…

【题目】【网络系统管理】2022年甘肃省职业院校技能大赛-网络构建-试卷

极安云科专注职业教育技能竞赛培训4年&#xff0c;包含信息安全管理与评估、网络系统管理、网络搭建等多个赛项及各大CTF模块培训学习服务。本团队基于赛项知识点&#xff0c;提供完整全面的系统性理论教学与技能培训&#xff0c;成立至今持续优化教学资源与讲师结构&#xff0…

C++ Qt开发:QUdpSocket网络通信组件

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍如何运用QUdpSocket组件实现基于UDP的网络通信…

离散制造企业MES与流程企业MES的区别

制造行业根据加工过程管控主要分为两大类&#xff1a;离散型与流程型。 离散型主要是通过对原材料的物理形状改进或组合&#xff0c;使其成为产品并增值&#xff0c;如机械加工、家用电器、电子电气行业等。 流程型则主要是采用物料或化学的方法对原材料进行混合、分离、加热…