codevs1226倒水问题(Bfs)
/*
首先建立模型 可以看成是三个水杯 第三个无穷大 (这里看成是201足够了)
最少步数 想到Bfs
维护队列里的状态:要有个步数 还要有v :此时刻三个杯子有多少水
然后倒水:因为没有刻度 所以有两种情况:要么出水的为空 要么接水的满了
然后每次取队首时判断有没有某一个杯子装的水恰好为答案
注意判重时可以弄一个f [a][b] 表示第一个杯子有a升水 第二个杯子有b升水的状态存在了没
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
using namespace std;
int x,y,z,f[][],c[];
struct node
{
int v[];//此状态每个杯子的水有多少
int step;//步数
};
queue<node>q;
int main()
{
cin>>x>>y>>z;
c[]=x;c[]=y;c[]=;//记号最大容量
node be;
be.step=;
be.v[]=;be.v[]=;
be.v[]=;
q.push(be);//出状态 前两个杯子空 第三个大杯子满
while(!q.empty())
{
node tmp=q.front();
q.pop();
if(tmp.v[]==z||tmp.v[]==z)//判断符合条件了没有
{
cout<<tmp.step;
return ;
}
int i,j;
for(i=;i<=;i++)// 枚举出水的杯子和接水的
for(j=;j<=;j++)
if(!tmp.v[i]||tmp.v[j]==c[j])continue;//如果出水的空了 或者接水的满了 跳过
else
{
int minn=min(tmp.v[i]+tmp.v[j],c[j])-tmp.v[j];//计算到多少水
node x=tmp;
x.v[i]-=minn;//倒水
x.v[j]+=minn;//节水
x.step=tmp.step+;
if(f[x.v[]][x.v[]]==)//判断此状态存在了没
{
f[x.v[]][x.v[]]=;
q.push(x);
}
}
}
cout<<"impossible";
return ;
}
codevs1226倒水问题(Bfs)的更多相关文章
- codevs1226 倒水问题
题目描述 Description 有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水.设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水 ...
- hdu1495-非常可乐-(倒水问题bfs)
http://acm.hdu.edu.cn/showproblem.php?pid=1495 题解: 1.最少次数?江湖套路,bfs.2.怎么倒?从一个杯子倒到另一个杯子.3.倒多少?因为没有刻度,所 ...
- POJ 3414 Pots【bfs模拟倒水问题】
链接: http://poj.org/problem?id=3414 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22009#probl ...
- HDU 1495 非常可乐(BFS倒水问题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目大意:只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101) ...
- HDU 1495 非常可乐【BFS/倒水问题】
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- CodeVS 1226 倒水问题【DFS/BFS】
题目描述 Description 有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水.设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水 ...
- POJ - 3414 Pots BFS(著名倒水问题升级版)
Pots You are given two pots, having the volume of A and B liters respectively. The following operati ...
- BFS(倒水问题) HDU 1495 非常可乐
题目传送门 /* BFS:倒水问题,当C是奇数时无解.一共有六种情况,只要条件符合就入队,我在当该状态vised时写了continue 结果找了半天才发现bug,泪流满面....(网上找份好看的题解都 ...
- HDU 1495 很可乐(BFS 倒水问题)
题意 将体积为s的可乐 利用容积分别为n和m的两个杯子平均分为两份 至少须要倒多少次可乐 能够把容器s,n,m中装的可乐量看成一种状态 容器都是没有刻度的 所以每次倒可乐要么把自己倒完 要么把 ...
随机推荐
- 得到某个进程所有线程ID和入口地址
#include <windows.h> #include <tlhelp32.h> #include "iostream" using namespace ...
- Unity问答——请问一下动画状态机怎么判断动画是否播完了?
这篇博客源自我在泰课在线的回答.链接:http://www.taikr.com/group/1/thread/233 问:请问一下动画状态机怎么判断动画是否播完了? 答: 1. 脚本参考 Animat ...
- BZOJ 1050 旅行
Description 给你一个无向图,N(N<=500)个顶点, M(M<=5000)条边,每条边有一个权值Vi(Vi<30000).给你两个顶点S和T,求一条路径,使得路径上最大 ...
- BZOJ 1035 Risk
Description 经过连续若干年的推广,Risk这个游戏已经风靡全国,成为大众喜闻乐见的重要娱乐方式.Risk这个游戏可以理解为一种简易的策略游戏,游戏者的目的是占领所有的土地.由于游戏规则的规 ...
- A Statistical View of Deep Learning (V): Generalisation and Regularisation
A Statistical View of Deep Learning (V): Generalisation and Regularisation We now routinely build co ...
- javascript summary
Client Javascript HTML5: http://www.html5rocks.com/en/ Libraray: JQuery, JQuery Mobile, Zepto, MoolT ...
- VS2012(update3)编译Qt5.1.1 32位静态库debug-and-release版及结果分享
1. 下载zip源码,我下载的是qt-everywhere-opensource-src-5.1.1.zip这个文件. 2.安装python 3.解压缩qt-everywhere-opensource ...
- For循环练习之99乘法表和转义字符
之前说了for循环的概念以及常用到的操作,那么我们接下来做几个巩固练习: 1.打印99乘法表: 99乘法表的形式: 1*1 = 1 1*2 = 2 2*2 = 4 1*3 = 3 2*3 = 6 3* ...
- BZOJ1044: [HAOI2008]木棍分割
1044: [HAOI2008]木棍分割 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 1580 Solved: 567[Submit][Statu ...
- poj 1273 Drainage Ditches (网络流 最大流)
网络流模板题. ============================================================================================ ...