三个水杯
来源:互联网 发布:淘宝怎么看店铺评价 编辑:程序博客网 时间:2024/03/29 17:50
描述
给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算。现在要求你写出一个程序,使其输出使初始状态到达目标状态的最少次数。
输入
第一行一个整数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
给出三个水杯,大小不一,并且只有最大的水杯的水是装满的,其余两个为空杯子。三个水杯之间相互倒水,并且水杯没有标识,只能根据给出的水杯体积来计算。现在要求你写出一个程序,使其输出使初始状态到达目标状态的最少次数。
输入
第一行一个整数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
#include<stdio.h>#include<queue>#include<iostream>#include<string.h>bool hash[1000010];int flag,va[3],ea,eb,ec;using namespace std;struct Node{int v[3],step;};int change(Node node){return node.v[0]*10000+node.v[1]*100+node.v[2];}bool end(Node node){return (node.v[0]==ea&&node.v[1]==eb&&node.v[2]==ec);}void bfs(){Node node,new_node;queue<Node>q_node;int i,j,min,index=0;node.v[0]=va[0];node.v[1]=0;node.v[2]=0;node.step=0;hash[change(node)]=1;flag=0;memset(hash,0,sizeof(hash));for(q_node.push(node);!q_node.empty();q_node.pop()){node=q_node.front();if(end(node)) {flag=1;index=node.step;break;}for(i=0;i<3;i++){for(j=0;j<3;j++){if(i==j) continue;min=va[j]-node.v[j];if(min>node.v[i])min=node.v[i];new_node=node;new_node.v[i]-=min;new_node.v[j]+=min;new_node.step=node.step+1;if(!hash[change(new_node)]){q_node.push(new_node);hash[change(new_node)]=1;}}}}if(!flag)printf("-1\n");else printf("%d\n",index);}int main(){//freopen("b.txt","r",stdin);int t;scanf("%d",&t);while(t--){scanf("%d %d %d",&va[0],&va[1],&va[2]);scanf("%d %d %d",&ea,&eb,&ec);bfs();}return 0;}
0 0
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯
- 三个水杯问题
- NYOJ21 三个水杯
- Matlab之三次样条画图和表达式
- sql选择一定长度的字段
- nyoj586 &poj 2456
- Matlab之贝塞尔函数
- 深入理解Java类加载器(2):线程上下文类加载器
- 三个水杯
- Matlab之DPSK
- 1、引擎核心——渲染框架篇
- 三星Galaxy s4(i9505)完美获取root权限教程
- 产生随机数的局限以及处理方法
- [LeetCode]LRU Cache
- 对OpenGL的初步认识及多版本框架介绍(基于NeHe的OpenGL教程)
- WIX学习(十七)
- Apache Maven PMD Plugin