描述

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

输入

第一行一个整数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

解题思路:bfs求最少的倒水次数,每次都有6种倒水可能,标记一下三个水杯的容量状态,用队列来模拟倒水过程,如果出现某个过程达到最终的倒水状态,则直接返回其倒水次数;否则直到队空,返回-1,说明不能到达最终的容量状态。详解看代码。

AC代码:

 #include<bits/stdc++.h>
using namespace std;
int t,Vmax[],Est[],Cur[];
bool vis[][][];
struct node{int a,b,c,step;}cur,tmp;
queue<node> que;
int bfs(int x){
while(!que.empty())que.pop();
cur.a=x,cur.b=cur.c=cur.step=;
vis[cur.a][cur.b][cur.c]=true;
que.push(cur);
while(!que.empty()){
cur=que.front();que.pop();
if(cur.a==Est[]&&cur.b==Est[]&&cur.c==Est[])return cur.step;//到达最终的状态
for(int i=;i<;++i){
for(int j=;j<;++j){//6种倒水可能
tmp=cur;Cur[]=tmp.a,Cur[]=tmp.b,Cur[]=tmp.c;//每次重新赋值
if(i!=j&&Cur[i]>&&Cur[j]<Vmax[j]){//i-->j,如果第i个桶的水量大于0,并且第j个桶的水量不超过其最大容量
int gg=min(Cur[i],Vmax[j]-Cur[j]);//如果第j个桶剩余容量小于第i个桶里的水量,那么只能倒Vmax[j]-Cur[j];反之,将第i个桶的水量全部倒给第j个桶
Cur[i]-=gg,Cur[j]+=gg;// i--->j
if(!vis[Cur[]][Cur[]][Cur[]]){//状态未出现过
vis[Cur[]][Cur[]][Cur[]]=true;
tmp.a=Cur[],tmp.b=Cur[],tmp.c=Cur[];//重新赋值
tmp.step++;
que.push(tmp);
}
}
}
}
}
return -;//不满足条件则返回-1
}
int main(){
while(cin>>t){
while(t--){
for(int i=;i<;++i)cin>>Vmax[i];
for(int i=;i<;++i)cin>>Est[i];
memset(vis,false,sizeof(vis));
cout<<bfs(Vmax[])<<endl;
}
}
return ;
}

NYOJ #21 三个水杯(bfs)的更多相关文章

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

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

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

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

  3. NYOJ 21 三个水杯

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

  4. nyoj三个水杯(bfs)

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

  5. nyoj 题目21 三个水杯

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

  6. 三个水杯 (bfs)

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

  7. nyoj 三个水杯

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

  8. nyoj 21-三个水杯(BFS)

    21-三个水杯 内存限制:64MB 时间限制:1000ms Special Judge: No accepted:7 submit:18 题目描述: 给出三个水杯,大小不一,并且只有最大的水杯的水是装 ...

  9. 三个水杯(BFS)

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

随机推荐

  1. Creating a .bash_profile on your mac

    A typical install of OS X won't create a .bash_profile for you. When you want to run functions from ...

  2. OpenCV2.3.1在CentOS6.5下的安装

    安装的linux版本号是centos6.5.选择的是opencv2.3.1.不是非常新的版本号. 由于在安装opencv2.4.9的时候.make的过程中出现了问题. 一:安装依赖包 依赖包用yum安 ...

  3. IOS------Warning

    本文转载至 http://blog.csdn.net/shijiucdy/article/details/8755667 处理警告: 1,Validate Project Settings(updat ...

  4. mysql优化---in型子查询,exists子查询,from 型子查询

    in型子查询引出的陷阱:(扫更少的行,不要临时表,不要文件排序就快) 题: 在ecshop商城表中,查询6号栏目的商品, (注,6号是一个大栏目) 最直观的: mysql); 误区: 给我们的感觉是, ...

  5. (linux)container_of()宏

      在学习Linux驱动的过程中,遇到一个宏叫做container_of. 该宏定义在include/linux/kernel.h中,首先来贴出它的代码: /**  * container_of - ...

  6. 深入理解WeakHashmap

    转自:http://mikewang.blog.51cto.com/3826268/880775 (一) 查看API文档,WeakHashmap要点如下: 1. 以弱键 实现的基于哈希表的 Map.在 ...

  7. 【JSOI 2007】建筑抢修

    [题目链接] 点击打开链接 [算法] 将T2从小到大排序,当决策当前建筑修或不修时,若当前花费时间 + T1 <= T2,则修,否则判断T1是否小于之前修的 T1最大的建筑,若小于,则修,我们可 ...

  8. 通用异步 Windows Socket TCP 客户端组件的设计与实现

    编写 Windows Socket TCP 客户端其实并不困难,Windows 提供了6种 I/O 通信模型供大家选择.但本座看过很多客户端程序都把 Socket 通信和业务逻辑混在一起,剪不断理还乱 ...

  9. rsync(二):inotify+rsync详细说明和sersync

    以下是rsync系列篇: inotify+rsync 如果要实现定时同步数据,可以在客户端将rsync加入定时任务,但是定时任务的同步时间粒度并不能达到实时同步的要求.在Linux kernel 2. ...

  10. LNMP+Zabbix的安装与部署

    LNMP+Zabbix的安装与部署 一.Zabbix简介 1.zabbix是一个基于WEB界面的,并提供分布式系统监视以及网络监视功能的企业级的开源解决方案. zabbix能监视各种网络参数,保证服务 ...