nyoj21 三个水杯 (BFS)
- 题目21
- 题目信息
- 运行结果
- 本题排行
- 讨论区
三个水杯
- 描述
-
给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算。现在要求你写出一个程序,使其输出使初始状态到达目标状态的最少次数。
- 输入
-
第一行一个整数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)相关推荐
- nyoj21 三个水杯
nyoj21 三个水杯 时空限制 1000ms/128MB 题目描述: 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识,只能根据 ...
- nyoj 21 三个水杯 BFS
三个水杯 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识 ...
- NYoj21 三个水杯
三个水杯 时间限制: 1000 ms | 内存限制: 65535 KB 难度: 4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没 ...
- [ACM_NYOJ_21]三个水杯(BFS广度优先搜索)
三个水杯 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识,只 ...
- NYOJ(21),BFS,三个水杯
题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=21 BFS判环,vis标记状态即可. #include <stdio.h> # ...
- 【CCCC】L3-018 森森美图 (30分),计算几何+判断三点共线+bfs最短路
problem L3-018 森森美图 (30分) 森森最近想让自己的朋友圈熠熠生辉,所以他决定自己写个美化照片的软件,并起名为森森美图.众所周知,在合照中美化自己的面部而不美化合照者的面部是让自己占 ...
- 搜索算法(三)--DFS/BFS求解宝岛探险问题(JAVA )
宝岛探险问题 问题描述:某片海域有诸多岛屿,用0表示海洋,1-9表示陆地,现给定一个岛屿上的坐标点,求解所在岛屿的面积 思路:显然这是一个搜索算法,即只要从当前坐标点开始遍历,每遍历到一个点进行计数即 ...
- 状态目标bfs+哈希表 + 三杯水
本篇文章是一篇关于状态目标的帖子 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间互相倒水,并且水杯没有标识,只能根据给出的水杯体积来计算.当初要求你写出一个程序 ...
- NYOJ--21--bfs--三个水杯
/* 输入 第一行一个整数N(0<N<50)表示N组测试数据 接下来每组测试数据有两行,第一行给出三个整数V1 V2 V3 (V1>V2>V3 V1<100 V3> ...
- HDU1495 非常可乐 【BFS】
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
最新文章
- Notification和KVO有什么不同
- mysql docker自动化_docker自动化部署
- SpringBoot+MySql+ElementUI实现一对多的数据库的设计以及增删改查的实现
- SG函数和SG定理(Sprague_Grundy)
- 多目标跟踪(MOT)论文随笔-SIMPLE ONLINE AND REALTIME TRACKING (SORT)
- java定时任务什么时间e结束_Java定时任务
- 2-16 mysql主从复制
- C++小白课本练习4
- 系统架构师学习笔记_第六章(下)_连载
- snmp windows工具_局域网IP扫描工具下载-局域网IP扫描工具(SoftPerfect Network Scanner)v7.3.0官方版...
- l455在线清零服务器,爱普生epson l455清零软件官方版
- xlsx格式表格汉字批量转音节,不带声调(python)
- MySQL内存表的特性与使用介绍 -- 简明现代魔法
- 教你怎样无需微云会员满速下载文件
- aardio - 【开源软件】aardio文件加解密
- Enhance Security with Port Knocking
- 橙色优学:互联网对传统行业说是机会,对年轻人来说更是风口
- 超级详细解析——字模
- php基础语法——输出语句
- Nessus配置及使用说明
热门文章
- 云南事业单位计算机专业职称评定,事业单位改革后,职称评定条件汇总
- 使用Python爬虫批量抓取PubChem化合物信息
- spring AOP注解拦截action导致无法注入
- Linux中 dir 命令还能这样玩!
- iis安装后没有信息服务器,iis安装没有ftp服务器
- unity读取外部资源
- TencentOS-tiny 移植到STM32F407(MDK)
- 苹果Mac Os系统安装nvm、svn、打开真机控制台
- 生成式注意力机制 (Generative Attention Mechanisms)
- 10分钟Window本地部署stable diffusion AI绘图【入门教程】