nyoj21 三个水杯

时空限制    1000ms/128MB

题目描述:

给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算。现在要求你写出一个程序,使其输出使初始状态到达目标状态的最少次数。

输入描述:

第一行一个整数N(0<N<50)表示N组测试数据
接下来每组测试数据有两行,第一行给出三个整数V1 V2 V3 (V1>V2>V3 V1<100 V3>0)表示三个水杯的体积。
第二行给出三个整数E1 E2 E3 (体积小于等于相应水杯体积)表示我们需要的最终状态

输出描述:

每行输出相应测试数据最少的倒水次数。如果达不到目标状态输出-1

样例输入:

2
6 3 1
4 1 1
9 3 2
7 1 1

样例输出:

3
-1

代码

#include<iostream>
#include<cstring>
#include<queue>
#include<algorithm>
using namespace std;
const int N = 105;
int v1,v2,v3,e1,e2,e3;
bool f[N][N][N];
struct node{int x,y,z,step;node(){  }node(int a,int b,int c,int d):x(a),y(b),z(c),step(d){ }
};int bfs(){memset(f,0,sizeof(f));queue<node> q;q.push(node(v1,0,0,0));f[v1][0][0] = true;while (!q.empty()){node cur=q.front(); q.pop();if (cur.x==e1 && cur.y==e2 && cur.z==e3) return cur.step;    //到达目标状态if (cur.x>0 && cur.y<v2){ //v1->v2int t=min(cur.x,v2-cur.y);if (!f[cur.x-t][cur.y+t][cur.z]){q.push(node(cur.x-t,cur.y+t,cur.z,cur.step+1));f[cur.x-t][cur.y+t][cur.z] = true;}}if (cur.x>0 && cur.z<v3){  //v1->v3int t=min(cur.x,v3-cur.z);if (!f[cur.x-t][cur.y][cur.z+t]){q.push(node(cur.x-t,cur.y,cur.z+t,cur.step+1));f[cur.x-t][cur.y][cur.z+t] = true;}}if (cur.y>0 && cur.x<v1){  //v2->v1int t=min(cur.y,v1-cur.x);if (!f[cur.x+t][cur.y-t][cur.z]){q.push(node(cur.x+t,cur.y-t,cur.z,cur.step+1));f[cur.x+t][cur.y-t][cur.z] = true;}}if (cur.y>0 && cur.z<v3){  //v2->v3int t=min(cur.y,v3-cur.z);if (!f[cur.x][cur.y-t][cur.z+t]){q.push(node(cur.x,cur.y-t,cur.z+t,cur.step+1));f[cur.x][cur.y-t][cur.z+t] = true;}}if (cur.z>0 && cur.x<v1){  //v3->v1int t=min(cur.z,v1-cur.x);if (!f[cur.x+t][cur.y][cur.z-t]){q.push(node(cur.x+t,cur.y,cur.z-t,cur.step+1));f[cur.x+t][cur.y][cur.z-t] = true;}}if (cur.z>0 && cur.y<v2){  //v3->v2int t=min(cur.z,v2-cur.y);if (!f[cur.x][cur.y+t][cur.z-t]){q.push(node(cur.x,cur.y+t,cur.z-t,cur.step+1));f[cur.x][cur.y+t][cur.z-t] = true;}}}return -1;
}int main(){int N;cin>>N;while (N--){cin>>v1>>v2>>v3>>e1>>e2>>e3;if (v1!=e1+e2+e3) cout<<-1<<endl;else cout<<bfs()<<endl;}return 0;
}

nyoj21 三个水杯相关推荐

  1. NYoj21 三个水杯

    三个水杯 时间限制: 1000 ms  |  内存限制: 65535 KB 难度: 4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没 ...

  2. [ACM_NYOJ_21]三个水杯(BFS广度优先搜索)

    三个水杯 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识,只 ...

  3. nyoj 21 三个水杯 BFS

    三个水杯 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识 ...

  4. NYOJ(21),BFS,三个水杯

    题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=21 BFS判环,vis标记状态即可. #include <stdio.h> # ...

  5. NYOJ--21--bfs--三个水杯

    /* 输入 第一行一个整数N(0<N<50)表示N组测试数据 接下来每组测试数据有两行,第一行给出三个整数V1 V2 V3 (V1>V2>V3 V1<100 V3> ...

  6. 状态目标bfs+哈希表 + 三杯水

    本篇文章是一篇关于状态目标的帖子 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间互相倒水,并且水杯没有标识,只能根据给出的水杯体积来计算.当初要求你写出一个程序 ...

  7. 码农应该对自己好一点【挑选水杯全攻略】

    作为一位苦逼的码农,天天有干不完的coding.天天有熬不完的夜,善待自己,多喝水.补充水分,但前提应该选一个合适的水杯.哈哈哈 水是我们日常生活中不可或缺的一部分,而恰恰水杯成为了链接水和嘴的载体, ...

  8. 搜索框、微信发红包、水杯、QQ登录、聊天窗口、两台电梯的测试用例

    一.搜索框的测试用例 1.功能测试 1. 搜索框输入内容为空,验证功能是否正确2. 搜索框输入内容为空格,验证功能是否正确3. 边界值验证:最大输入的字符串长度,最小输入的字符串长度4. 超长字符串的 ...

  9. 2022-2028年中国水杯行业市场运营态势及投资战略规划报告

    报告类型:产业研究 报告格式:电子版.纸介版.电子+纸介 出品单位:智研咨询-产业信息网 智研咨询发布的<2022-2028年中国水杯行业市场运营态势及投资战略规划报告>共十五章.首先介绍 ...

最新文章

  1. powershell共享服务器写文件,Windows PowerShell:共享您的脚本 - 轻松实现
  2. C语言的运算符的优先级与结合性+ASCII表
  3. [BZOJ]3436: 小K的农场
  4. opencv 一种灰度图像增强方式
  5. VisualStudio安装
  6. 长文预警-超详细的熊猫烧香病毒分析_00
  7. C# 将JSON数组转化为对象
  8. linux设备驱动程序之时钟管理
  9. 2021爱分析·数据智能平台厂商全景报告
  10. sqlh和mysql的区别_HSQL和MySQL的区别
  11. Access2016学习9
  12. 计算机网络的现状分析,计算机网络技术的发展现状和趋势分析.doc
  13. Arduino与按钮,火警传感器,无源红外(PIR)传感器和酒精传感器
  14. 创建一个Student 类 包含属性有 序号 姓名 年龄 生日 提供对应的setter/getter 创建对象,完成赋值(setter赋值和构造方法赋值) 在控制台输出学生对象的信息
  15. python将excel数据提取到word
  16. 平价无线充电宝哪个牌子好?平价好用的无线充电宝推荐
  17. 负数在计算机中的存储和表示
  18. 轻松主义或许是一剂良药!
  19. android canvas广告牌,亚马逊广告后台创建CPC站内广告教程
  20. 智能向左,设计向右,酒店行业进入“智美新时代”

热门文章

  1. Java基础教程0-测试人员为什么要掌握Java基础
  2. solr账号密码配置
  3. MySQL数据库提示:Communications link failure,The last packet succe
  4. 智能安全配电装置伙房食堂中的应用
  5. 什么是企业中台?企业为什么要建中台?企业如何建设中台?
  6. JavaScript自己封装ajax的js
  7. RHEL5下构建LAMP+Postfix+Dovecot+SquirrelMail+Extmail+Extman+DRBD
  8. 利用Python统计中文或英文文本词频(适合初学者)
  9. 3dmax脚本将字符串转换成整型,去掉结尾多余的字符串
  10. 修改授时服务器地址,win10设置网络授时服务器地址