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中装的可乐量看成一种状态 容器都是没有刻度的 所以每次倒可乐要么把自己倒完 要么把 ...
随机推荐
- NSDictionary 使用总结
NSDictionary使用小结 #import <Foundation/Foundation.h> int main(int argc, const char * argv[]) { @ ...
- www.nt-kaisheng.com
线号机耗材网站开发架构,是基于丽标线号机_凯标线号机_耗材|色带|号码管批发|电缆标牌_南通凯胜电器有限公司,进行的服务需求的网站. 南通凯胜电器有限公司网站与手工编码比起来,HTML5框架在准确性和 ...
- 未能加载文件或程序集XXX或它的某一个依赖项。试图加载格式不正确的程序。
今天发布网站时,老是弹出下面这样一个错误. 经过一番折腾终于找到答案: 方法一: 在IIS中设置, 属性 ——常规—— 启用32位应用程序 修改为True. 方法二: 修改项目属性——生成——目标平台 ...
- 利用over开窗函数取第一条记录
SQL> set linesize 200 SQL> select * from (select a.* ,row_number() over( order by empno) rn f ...
- Git基本操作(Windows下)
在开始使用Git之前,我觉得是很有必要了解下Git与其他版本控制系统的差异与文件在Git中的三种状态.可以到下面这个网站看下:Git详解之一 Git起步,了解之后,可以对Git的基本操作有一个更清晰的 ...
- rsync命令来实现将服务器端的文件备份到客户端
rsync命令来实现将服务器端的文件备份到客户端
- 快速傅里叶变换(FFT):COGS 2216. 你猜是不是KMP
2216. 你猜是不是KMP ★★★☆ 输入文件:guess.in 输出文件:guess.out 简单对比时间限制:1 s 内存限制:256 MB [题目描述] XX在玩两个串的游戏. ...
- 导出Excel文件,npoi方式和通过microsoft.visual basic.dll
一:例子截图: 二:NPOI截图 三:EmployeeListWindow.cs代码 using System; using System.Collections.Generic; using Sys ...
- SRM 500(2-1000pt)
DIV2 1000pt 题意:给定两个集合A和B,A = {b1*q1i | 0 <= i <= n1-1},B = {b2*q2i | 0 <= i <= n2-1},问将A ...
- zzuoj 10408: C.最少换乘【最短路dijkstra】
10408: C.最少换乘 Time Limit: 2 Sec Memory Limit: 128 MBSubmit: 31 Solved: 8[Submit][Status][Web Board ...