codevs1226 倒水问题
题目描述 Description
有两个无刻度标志的水壶,分别可装 x 升和 y 升 ( x,y 为整数且均不大于 100 )的水。设另有一水 缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水也可以相互倾倒。已知 x 升壶为空 壶, y 升壶为空壶。问如何通过倒水或灌水操作, 用最少步数能在x或y升的壶中量出 z ( z ≤ 100 )升的水 来。
一行,三个数据,分别表示 x,y 和 z;
一行,输出最小步数 ,如果无法达到目标,则输出"impossible"
3 22 1
14
思路:
普通广搜
代码:
#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#define maxn 100000
using namespace std;
struct sta{
int x;
int y;
int step;
int frm;
};
int mx,my,z,j[][],solved = ;
sta temp;
void input(){
cin>>mx>>my>>z;
temp.x = temp.y = temp.step = ;
temp.frm = -;
}
sta expand(sta a,int sign){
if(sign == ) a.x = ;
if(sign == ) a.y = ;
if(sign == ) a.x = mx;
if(sign == ) a.y = my;
if(sign == ){
int d;
if(mx - a.x < a.y) d = mx - a.x;
else d = a.y;
a.y -= d;
a.x += d;
}
if(sign == ){
int d;
if(my - a.y < a.x) d = my - a.y;
else d = a.x;
a.y += d;
a.x -= d;
}
a.frm = sign;
a.step++;
if(j[a.x][a.y]) a.step = -;
j[a.x][a.y] = ;
return a;
}
void bfs(){
sta q[maxn];
int h = ,t = ;
q[h] = temp;
while(h != t){
if(q[h%maxn].x == z || q[h%maxn].y == z) {
cout<<q[h%maxn].step<<endl;
solved = ;
break;
}
for(int i = ;i <= ;i++){
if(i == && (q[h%maxn].x == ||q[h%maxn].frm == )) continue;
if(i == && (q[h%maxn].y == ||q[h%maxn].frm == )) continue;
if(i == && (q[h%maxn].x == mx ||q[h%maxn].frm == )) continue;
if(i == && (q[h%maxn].y == my ||q[h%maxn].frm == )) continue;
if(i == && (q[h%maxn].y <= || q[h%maxn].x >= mx || q[h%maxn].frm == )) continue;
if(i == && (q[h%maxn].x <= || q[h%maxn].y >= my || q[h%maxn].frm == )) continue;
temp = expand(q[h%maxn],i); if(temp.step != -) {
t++;
q[t%maxn] = temp; }
}
h++;
}
}
int main(){
input();
if(z > mx || z > my || !mx || !my || (mx == my && mx != z)){
cout<<"impossible"<<endl;
return ;
}
bfs();
if(!solved) cout<<"impossible"<<endl;
return ;
}
codevs1226 倒水问题的更多相关文章
- codevs1226倒水问题(Bfs)
/* 首先建立模型 可以看成是三个水杯 第三个无穷大 (这里看成是201足够了) 最少步数 想到Bfs 维护队列里的状态:要有个步数 还要有v :此时刻三个杯子有多少水 然后倒水:因为没有刻度 所以有 ...
- 广度优先搜索 cdoevs 1226 倒水问题
cdoevs 1226 倒水问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有两个无刻度标志的水壶,分别可装 x 升 ...
- 倒水问题 (codevs 1226) 题解
[问题描述] 有两个无刻度标志的水壶,分别可装x升和y升 ( x,y 为整数且均不大于100)的水.设另有一水缸,可用来向水壶灌水或接从水壶中倒出的水, 两水壶间,水也可以相互倾倒.已知x升壶为空壶, ...
- POJ 3414 Pots【bfs模拟倒水问题】
链接: http://poj.org/problem?id=3414 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22009#probl ...
- yzoi1777倒水问题的详细解法
Description - 问题描述 x.y.z三个容器,其最大容量分别是xMAX升.yMAX升.zMAX升,这里规定100>xMAX>yMAX>zMAX.一开始x是装满了水的,现在 ...
- 倒水问题-->经典面试题目
题目详细: 有两个容器,容积分别为A升和B升,有无限多的水,现在需要C升水.我们还有一个足够大的水缸,足够容纳C升水.起初它是空的,我们只能往水缸里倒入水,而不能倒出.可以进行的操作是:把一个容器灌满 ...
- 倒水问题 (FillUVa 10603) 隐式图
题意:本题的题意是给你三个杯子,第一二个杯子是空的,第三个杯子装满水,要求是量出一定容量d升的水.若是得不到d升的水,那就让某一个杯子里面的水达到d',使得d'尽量接近d升. 解题思路:本题是给出初始 ...
- uva10603 倒水问题
状态搜索.类似八数码问题 AC代码 #include<cstdio> #include<queue> #include<cstring> #include<a ...
- 美团codeM预赛A轮 倒水
[编程题] 倒水 时间限制:1秒 空间限制:32768K 有一个大水缸,里面水的温度为T单位,体积为C升.另有n杯水(假设每个杯子的容量是无限的),每杯水的温度为t[i]单位,体积为c[i]升. 现在 ...
随机推荐
- 13、git
安装Git 网上有很多Git安装教程,如果需要图形界面,windows下建议使用TortoiseGit,linux建议使用Git GUI或者GITK.(windows下载exe安装包,linux可以使 ...
- 【杂文】虚拟键码表(供函数GetAsyncKeyState()使用)
[杂文]虚拟键码表(供函数GetAsyncKeyState()使用) 什么?你说你不知道 \(GetAsyncKeyState()\) ?\(→\)戳我\(←\) (惊奇的发现 \(0\) ~ \(9 ...
- phpAnalysis调试接口
phpAnalysis是一款轻量级非侵入式PHP应用性能分析器,适用于开发.测试及生产环境部署使用,方便开发及测试工程师诊断性能问题: 通过tideways收集PHP程序单步运行过程中所有的函数调用时 ...
- base64编码上传图片java后台接收实例
原文地址:http://blog.csdn.net/tonyfreak/article/details/72522855 思路 前台传以data:image/jpeg;base64,开头的base64 ...
- Django之序列化
关于Django中的序列化主要应用在将数据库中检索的数据返回给客户端用户,特别的Ajax请求一般返回的为Json格式. 1.serializers from django.core ...
- Android 性能优化(10)网络优化( 6)Optimizing General Network Use
Optimizing General Network Use This lesson teaches you to Compress Data Cache Files Locally Optimize ...
- 一个完整的mybatis项目,包含增删改查
1.导入jar包,导入相关配置文件,均在自己博客园的文件中 编写mybatis.xml文件 <?xml version="1.0" encoding="UTF-8& ...
- es6 export-from用法
语法: export * from "foo"; export {foo} from "foo"; export {foo, bar} from "f ...
- Java反射机制实战——字段篇
首先,我们来认识几个类. Class(java.lang.Class) Class对象是一个特殊对象,每一个类都有一个Class对象,用来创建该类的“常规”对象.可以通过对象的getClass()方法 ...
- PAT甲级考前整理(2019年3月备考)之二,持续更新中.....
PAT甲级考前整理之一网址:https://www.cnblogs.com/jlyg/p/7525244.html,主要总结了前面131题的类型以及易错题及坑点. PAT甲级考前整理三网址:https ...