三个水杯 (bfs)
Input
接下来每组测试数据有两行,第一行给出三个整数V1 V2 V3 (V1>V2>V3 V1<100 V3>0)表示三个水杯的体积。
第二行给出三个整数E1 E2 E3 (体积小于等于相应水杯体积)表示我们需要的最终状态
Output
Sample Input
2
6 3 1
4 1 1
9 3 2
7 1 1
Sample Output
3
-1
#include <vector>
#include <map>
#include <set>
#include <algorithm>
#include <iostream>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <string>
#include <cstring>
#include <queue>
using namespace std; int s1,s2,s3;
bool vis[][][]; struct node
{
int a,b,c;
int bu;
}x,y; int bfs()
{
queue<node> q;
while(!q.empty())
q.pop();
q.push(x);
while(!q.empty()){
node r=q.front();
q.pop();
vis[r.a][r.b][r.c]=true;
if(r.a==y.a&&r.b==y.b&&r.c==y.c) return r.bu; if(<r.a && r.b<s2){
node t=r;
int tt=min(t.a,s2-t.b);
t.a-=tt;
t.b+=tt;
if(vis[t.a][t.b][t.c]==false){
vis[t.a][t.b][t.c]=true;
t.bu++;
q.push(t);
}
} if(<r.a && r.c<s3){
node t=r;
int tt=min(t.a,s3-t.c);
t.a-=tt;
t.c+=tt;
if(vis[t.a][t.b][t.c]==false){
vis[t.a][t.b][t.c]=true;
t.bu++;
q.push(t);
}
} if(<r.b && r.a<s1){
node t=r;
int tt=min(t.b,s1-t.a);
t.b-=tt;
t.a+=tt;
if(vis[t.a][t.b][t.c]==false){
vis[t.a][t.b][t.c]=true;
t.bu++;
q.push(t);
}
} if(<r.b && r.c<s3){
node t=r;
int tt=min(t.b,s3-t.c);
t.b-=tt;
t.c+=tt;
if(vis[t.a][t.b][t.c]==false){
vis[t.a][t.b][t.c]=true;
t.bu++;
q.push(t);
}
} if(<r.c && r.a<s1){
node t=r;
int tt=min(t.c,s1-t.a);
t.c-=tt;
t.a+=tt;
if(vis[t.a][t.b][t.c]==false){
vis[t.a][t.b][t.c]=true;
t.bu++;
q.push(t);
}
} if(<r.c && r.b<s2){
node t=r;
int tt=min(t.c,s2-t.b);
t.c-=tt;
t.b+=tt;
if(vis[t.a][t.b][t.c]==false){
vis[t.a][t.b][t.c]=true;
t.bu++;
q.push(t);
}
}
}
return -;
} int main()
{
int n;
scanf("%d",&n);
while(n--){
memset(vis,false,sizeof(vis));
scanf("%d %d %d",&s1,&s2,&s3);
x.a=s1,x.b=,x.c=,x.bu=;
scanf("%d %d %d",&y.a,&y.b,&y.c);
if(s1<y.a+y.b+y.c){
printf("-1\n");
continue;
}
else{
printf("%d\n",bfs());
}
}
}
三个水杯 (bfs)的更多相关文章
- nyoj三个水杯(bfs)
三个水杯 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互 ...
- nyoj 21三个水杯(BFS + 栈)
题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=21 思想: 看了一下搜索就来写了这题(BFS 找出最短路径 所以用此来进行搜索) 这题在 ...
- NYOJ 21.三个水杯-初始态到目标态的最少次数-经典BFS
题目传送门:biubiubiu~ 三个水杯 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子. ...
- NYOJ #21 三个水杯(bfs)
描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算.现在要求你写出一个程序,使其输出使初始状态到达目标 ...
- 三个水杯(BFS)
三个水杯 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描写叙述 给出三个水杯.大小不一,而且仅仅有最大的水杯的水是装满的,其余两个为空杯子. 三个水杯之间相互倒水,而且水杯 ...
- NYOJ 21 三个水杯
三个水杯 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有 ...
- 三个水杯——java,广度优先搜索
题目如下: 21-三个水杯 内存限制:64MB 时间限制:1000ms 特判: No通过数:51 提交数:137 难度:4 题目描述: 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个 ...
- nyoj 三个水杯
三个水杯 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有标识,只 ...
- 26-三个水杯(bfs)
三个水杯 时间限制:1000 ms | 内存限制:65535 KB 难度:4 描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子.三个水杯之间相互倒水,并且水杯没有 ...
随机推荐
- 解析DBR操作系统引导记录数据
理解文件系统.你必须要熟悉DBR,下面我们就来看看文件系统解析DBR数据. Dos Boot Record(DBR)操作系统引导记录是由操作系统的格式化程序建立的.在文件系统驱动操作不论什么一个磁盘卷 ...
- 联想A798T刷机包 基于百度云V6 集成RE3.1.7美化版 精简冗余文件
ROM介绍 1.apk进行odex合并及zipaliang优化-省电及降低内存暂用. 2.測试相机.通话.数据.wifi.蓝牙.等传感器均正常,. 3.提供时间居中防iphone状态栏补丁 4.增加I ...
- Oracle DG故障诊断一则:alter database recover to logical standby new_logical_dbname卡住
我们在基于物理standby的基础上搭建逻辑备库过程过程中,在运行: alter database recover to logical standby READDB; 卡住不动,而且alert也没有 ...
- 正确使用Git Flow
Git 在团队中的最佳实践--如何正确使用Git Flow 我们已经从SVN 切换到Git很多年了,现在几乎所有的项目都在使用Github管理, 本篇文章讲一下为什么使用Git, 以及如何在团队中正确 ...
- 我见过最好的vsftpd配置教程(转)
环境:CentOS 5.0 操作系统一.安装:1.安装Vsftpd服务相关部件:[root@KcentOS5 ~]# yum install vsftpd*Dependencies Resolved= ...
- [LeetCode258] Add Digits 非负整数各位相加
题目: Given a non-negative integer num, repeatedly add all its digits until the result has only one di ...
- JDBC连接数据库 prepareStatement
import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import ...
- BZOJ3362 [Usaco2004 Feb]Navigation Nightmare 导航噩梦
标题效果:自脑补. 思维:与维护两个维度和可设置为检查右. 注意,标题给予一堆关系的.我们应该加入两对关系. Code: #include <cstdio> #include <cs ...
- C#软件开发实例.个人定制自己的屏幕抓图工具(八)加入了截图功能键盘
章文件夹 (一)功能概览 (二)创建项目.注冊热键.显示截图主窗体 (三)托盘图标及菜单的实现 (四)基本截图功能实现 (五)针对拖拽时闪烁卡顿现象的优化 (六)加入配置管理功能 (七)加入放大镜的功 ...
- android user如何打开一个版本号root才干
首先,你要确认你要打开adbd 的root 才干,或者让app 它有可能获得root 才干. (1). adbd 的root 才干 我们通常debug user 当问题的版本号, 或行为user ...