• 题目21
  • 题目信息
  • 运行结果
  • 本题排行
  • 讨论区

三个水杯

时间限制: 1000 ms  |  内存限制: 65535 KB
难度: 4
描述
给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算。现在要求你写出一个程序,使其输出使初始状态到达目标状态的最少次数。

输入
第一行一个整数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
来源
经典题目
上传者

hzyqazasdf

记得一年前看这道题 感觉说的是什么啊 完全看不懂 没有想法

前天有时间再看看 想用dfs做了  可是做的过程中发现了许多问题 以至于我没有做出来

看到评论区有人用bfs做 就用bfs了

#include <stdio.h>
#include <queue>
#include <string.h>
using namespace std;
struct node
{int step;int state[3];friend bool operator<(node x,node y){return x.step>y.step;}
};
//当前三个水杯的状态
int curState[3];
//三个水杯目标状态
int endState[3];
//三个水杯的最大容量
int maxState[3];
bool vis[101][101][101];
//i向j倒水
void pourWater(int i,int j)
{//如果j水杯是满的  或者 i水杯没水  返回 if(curState[j]==maxState[j]||curState[i]==0)return ;//如果i水杯当前的水容量大于j水杯空着的容量 if(curState[i]>=maxState[j]-curState[j]){curState[i]=curState[i]-(maxState[j]-curState[j]);curState[j]=maxState[j];}//如果i水杯当前的水容量小于水杯空着的容量 else{curState[j]+=curState[i];curState[i]=0;}
}
int bfs()
{priority_queue<node>s;while(!s.empty())s.pop();node temp,temp1;temp.state[0]=maxState[0];temp.state[1]=temp.state[2]=temp.step=0;vis[maxState[0]][0][0]=true;s.push(temp);while(!s.empty()){temp=temp1=s.top();s.pop();if(temp.state[0]==endState[0]&&temp.state[1]==endState[1]&&temp.state[2]==endState[2])return temp.step;curState[0]=temp.state[0];curState[1]=temp.state[1];curState[2]=temp.state[2];for(int i=0;i<3;i++){for(int j=0;j<3;j++){if(i!=j&&curState[i]!=0&&curState[j]!=maxState[j]){pourWater(i,j);temp.state[0]=curState[0];temp.state[1]=curState[1];temp.state[2]=curState[2];temp.step++;if(!vis[curState[0]][curState[1]][curState[2]]){vis[curState[0]][curState[1]][curState[2]]=true;s.push(temp);}temp=temp1;curState[0]=temp.state[0];curState[1]=temp.state[1];curState[2]=temp.state[2];}}}}return -1;
}
int main()
{int ncase;scanf("%d",&ncase);while(ncase--){memset(vis,false,sizeof(vis));scanf("%d %d %d",&maxState[0],&maxState[1],&maxState[2]);scanf("%d %d %d",&endState[0],&endState[1],&endState[2]);printf("%d\n",bfs());}
}

nyoj21 三个水杯 (BFS)相关推荐

  1. nyoj21 三个水杯

    nyoj21 三个水杯 时空限制    1000ms/128MB 题目描述: 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识,只能根据 ...

  2. nyoj 21 三个水杯 BFS

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

  3. NYoj21 三个水杯

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

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

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

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

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

  6. 【CCCC】L3-018 森森美图 (30分),计算几何+判断三点共线+bfs最短路

    problem L3-018 森森美图 (30分) 森森最近想让自己的朋友圈熠熠生辉,所以他决定自己写个美化照片的软件,并起名为森森美图.众所周知,在合照中美化自己的面部而不美化合照者的面部是让自己占 ...

  7. 搜索算法(三)--DFS/BFS求解宝岛探险问题(JAVA )

    宝岛探险问题 问题描述:某片海域有诸多岛屿,用0表示海洋,1-9表示陆地,现给定一个岛屿上的坐标点,求解所在岛屿的面积 思路:显然这是一个搜索算法,即只要从当前坐标点开始遍历,每遍历到一个点进行计数即 ...

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

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

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

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

  10. HDU1495 非常可乐 【BFS】

    非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

最新文章

  1. Notification和KVO有什么不同
  2. mysql docker自动化_docker自动化部署
  3. SpringBoot+MySql+ElementUI实现一对多的数据库的设计以及增删改查的实现
  4. SG函数和SG定理(Sprague_Grundy)
  5. 多目标跟踪(MOT)论文随笔-SIMPLE ONLINE AND REALTIME TRACKING (SORT)
  6. java定时任务什么时间e结束_Java定时任务
  7. 2-16 mysql主从复制
  8. C++小白课本练习4
  9. 系统架构师学习笔记_第六章(下)_连载
  10. snmp windows工具_局域网IP扫描工具下载-局域网IP扫描工具(SoftPerfect Network Scanner)v7.3.0官方版...
  11. l455在线清零服务器,爱普生epson l455清零软件官方版
  12. xlsx格式表格汉字批量转音节,不带声调(python)
  13. MySQL内存表的特性与使用介绍 -- 简明现代魔法
  14. 教你怎样无需微云会员满速下载文件
  15. aardio - 【开源软件】aardio文件加解密
  16. Enhance Security with Port Knocking
  17. 橙色优学:互联网对传统行业说是机会,对年轻人来说更是风口
  18. 超级详细解析——字模
  19. php基础语法——输出语句
  20. Nessus配置及使用说明

热门文章

  1. 云南事业单位计算机专业职称评定,事业单位改革后,职称评定条件汇总
  2. 使用Python爬虫批量抓取PubChem化合物信息
  3. spring AOP注解拦截action导致无法注入
  4. Linux中 dir 命令还能这样玩!
  5. iis安装后没有信息服务器,iis安装没有ftp服务器
  6. unity读取外部资源
  7. TencentOS-tiny 移植到STM32F407(MDK)
  8. 苹果Mac Os系统安装nvm、svn、打开真机控制台
  9. 生成式注意力机制 (Generative Attention Mechanisms)
  10. 10分钟Window本地部署stable diffusion AI绘图【入门教程】