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

 

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. rac安装grid报INS-41112错误

    原创作品,出自 "深蓝的blog" 博客,欢迎转载,转载时请务必注明下面出处,否则追究版权法律责任. 深蓝的blog:http://blog.csdn.net/huangyanlo ...

  2. 在linux上创建nfs遇到的问题。

    我们部署程序时,图片server是单独的一台server,有自己独立的域名.而应用部署在还有一台server上,我们使用一些附件上传工具.比方ajaxfileupload上传附件时是无法跨域訪问的. ...

  3. [LeetCode136]Single Number寻找一个数组里只出现一次的数

    题目: Given an array of integers, every element appears twice except for one. Find that single one. No ...

  4. Codeforces Round #270(利用prim算法)

    D. Design Tutorial: Inverse the Problem time limit per test 2 seconds memory limit per test 256 mega ...

  5. 开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器

    原文:[原创]开源Math.NET基础数学类库使用(13)C#实现其他随机数生成器                本博客所有文章分类的总目录:http://www.cnblogs.com/asxiny ...

  6. ICT工作的思考&lt;两&gt;

    2周奋战.我负责的LB昨天完成了最后一个模块.最后20日. 一周早于预期,经理说,出乎他的意料.So 奖励表,昨日,管理人员与我们合作,吃烧烤补补身子.我只想说,最后一个喘息. 这两周的生活确挺忙碌的 ...

  7. sql 中获取最后生成的标识值 IDENT_CURRENT ,@@IDENTITY ,SCOPE_IDENTITY 的用法和区别

    原文:sql 中获取最后生成的标识值 IDENT_CURRENT ,@@IDENTITY ,SCOPE_IDENTITY 的用法和区别 IDENT_CURRENT 返回为任何会话和任何作用域中的指定表 ...

  8. Java的socket服务UDP协议

    练习1 接收类 package com.socket.demo; import java.io.IOException; import java.net.DatagramPacket; import ...

  9. 第三篇——第二部分——第二文 计划搭建SQL Server镜像

    原文:第三篇--第二部分--第二文 计划搭建SQL Server镜像 本文紧跟上一章:SQL Server镜像简介 本文出处:http://blog.csdn.net/dba_huangzj/arti ...

  10. URL压缩算法的短地址

    时下,短网址应用已经在全国各大微博上開始流行了起来.比如QQ微博的url.cn,新郎的t.cn等. 我们在新浪微博上公布网址的时候.微博会自己主动判别网址.并将其转换,比如:http://t.cn/h ...