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

 

Input

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

 

Output

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

 

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)的更多相关文章

  1. nyoj三个水杯(bfs)

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

  2. nyoj 21三个水杯(BFS + 栈)

    题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=21 思想: 看了一下搜索就来写了这题(BFS 找出最短路径 所以用此来进行搜索) 这题在 ...

  3. NYOJ 21.三个水杯-初始态到目标态的最少次数-经典BFS

    题目传送门:biubiubiu~ 三个水杯 时间限制:1000 ms  |  内存限制:65535 KB 难度:4   描述 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子. ...

  4. NYOJ #21 三个水杯(bfs)

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

  5. 三个水杯(BFS)

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

  6. NYOJ 21 三个水杯

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

  7. 三个水杯——java,广度优先搜索

    题目如下: 21-三个水杯 内存限制:64MB 时间限制:1000ms 特判: No通过数:51 提交数:137 难度:4 题目描述: 给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个 ...

  8. nyoj 三个水杯

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

  9. 26-三个水杯(bfs)

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

随机推荐

  1. ueditor文本编辑器的使用

    1,头部引用 <link href="ueditor/themes/default/css/ueditor.css" rel="stylesheet" t ...

  2. 区分内边距与外边距padding和margin

    以两个并排显示的div为例说明. 现在两个div都有背景颜色, 右边的div中有几行p, 若是想要使两个div之间有间隔, 即两块带了颜色区域之间产生空隙, 则给div的css中外边距margin赋值 ...

  3. 【转】Directx11 SDK文档

    原文地址:http://blog.csdn.net/cmt100/article/details/6343274 总结 这是一个初步的教程.我们将通过必要的步骤来创建一个Win32 Applicati ...

  4. Hadoop之—— CentOS Warning: $HADOOP_HOME is deprecated解

    转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46389499 启动Hadoop时报了一个警告信息.我安装的Hadoop版本号是ha ...

  5. C# WinForm dataGridView 技巧小结

    1.不显示第一个空白列RowHeaderVisible属性设置为false 2.点击cell选取整行SelectinModel属性FullRowSelectRowSelectinModel属性设置或用 ...

  6. Binary System

    Description Usually we use number in the decimal system, for it is so convenient for us to remember ...

  7. Windows Server 2008 R2 SP1 下载地址

    Windows Server 2008 R2 SP1 http://download.microsoft.com/download/0/A/F/0AFB5316-3062-494A-AB78-7FB0 ...

  8. w3wp占用CPU过高

    w3wp占用CPU过高 在此之前项目有发生过两次类似的状况,都得以解决,但最近又会发现偶尔CPU会跑满,虽然之前使用过WinDbg解决过两次问题但人的记忆是不可靠的,今天处理同样问题的时候还是遇到了一 ...

  9. PoolBoy

    PoolBoy  source code : https://github.com/devinus/poolboy Checkout ready({checkout, Block, Timeout}, ...

  10. ZOJ 3795 Grouping(Tarjan收缩点+DAG)

    Suppose there are N people in ZJU, whose ages are unknown. We have some messages about them. The i-t ...