【BFS】POJ 3414
题意:两个壶倒水,三种操作,两个桶其中一个满足等于C的最少操作,输出路径。注意a,b互倒的时候能不能倒满,或者还有剩下的。
a->b || b->a || a->0 || b->0 || a->A || b->B (0<=a<=A&&0<=b<=B)
思路:虽说是BFS但是情况就这几种,分别写出来之后判断即可。输出路径可以用递归,我这里用了string来存。
#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#include <queue>
#include <algorithm>
#include <map>
using namespace std;
const int maxn = 1000+5;
char *S[3] ={"FILL","POUR","DROP"};
int A,B,C;
int vis[maxn][maxn];
struct node{
int a,b;
string opt[maxn]; //存路径再输出
int step ;
}ans;
bool check(node x){
if(x.a == C||x.b == C)
return true;
return false;
}
int bfs(){
queue<node>Q;
node p,t;
p.a = p.b = p.step = 0;
Q.push(p);
while(Q.size()){
p = Q.front();
Q.pop();
if(check(p)) {
ans = p;
return true;
}
//DROP(1)
if(!vis[0][p.b]){
t = p;
t.a = 0;
t.step++;
t.opt[t.step] = "DROP(1)";
Q.push(t);
vis[0][p.b] = 1;
}
//DROP(2)
if(!vis[p.a][0]){
t = p;
t.b = 0;
t.step++;
t.opt[t.step] = "DROP(2)";
Q.push(t);
vis[p.a][0] = 1;
}
//FILL(1)
if(!vis[A][p.b]){
t = p;
t.a = A;
t.step++;
t.opt[t.step] = "FILL(1)";
Q.push(t);
vis[A][p.b] = 1;
}
//FILL(2)
if(!vis[p.a][B]){
t = p;
t.b = B;
t.step++;
t.opt[t.step] = "FILL(2)";
Q.push(t);
vis[p.a][B] = 1;
}
//POUR(2,1)
if(!vis[p.b>(A-p.a)?A:(p.a+p.b)][p.b>(A-p.a)?(p.b-A+p.a):0]){
t = p;
t.a = p.b>(A-p.a)?A:(p.a+p.b);
t.b = p.b>(A-p.a)?(p.b-A+p.a):0;
t.step++;
t.opt[t.step] = "POUR(2,1)";
Q.push(t);
vis[t.a][t.b] = 1;
}
//POUR(1,2)
if(!vis[p.a>(B-p.b)?(p.a-B+p.b):0][p.a>(B-p.b)?B:(p.a+p.b)]){
t = p;
t.a = p.a>(B-p.b)?(p.a-B+p.b):0;
t.b = p.a>(B-p.b)?B:(p.a+p.b);
t.step++;
t.opt[t.step] = "POUR(1,2)";
Q.push(t);
vis[t.a][t.b] = 1;
}
}
return -1;
}
int main()
{
while(~scanf("%d%d%d",&A,&B,&C)){
memset(vis,0,sizeof(vis));
if(bfs()>0){
cout<<ans.step<<endl;
for(int i=1;i<=ans.step;i++)
cout<<ans.opt[i]<<endl;
}
else printf("impossible\n");
}
return 0;
}
【BFS】POJ 3414的更多相关文章
- 【BFS】POJ 3278
POJ 3278 Catch That Cow 题目:你要去抓一头牛,给出你所在的坐标和牛所在的坐标,移动方式有两种:要么前一步或者后一步,要么移动到现在所在坐标的两倍,两种方式都要花费一分钟,问你最 ...
- 【BFS】POJ 2251
POJ 2251 Dungeon Master 题意:有一个地图,三维,走的方向是上下,左右,前后.问你最小步数从起始点走到出口. 思路:三维的BFS,就是多加一组状态,需要细心(不细心如我就找了半个 ...
- 【bfs】 poj 3984 maze 队列存储
#include <iostream> #include <stdio.h> #include <cstring> #define Max 0x7f7f7f7f u ...
- poj3278-Catch That Cow 【bfs】
http://poj.org/problem?id=3278 Catch That Cow Time Limit: 2000MS Memory Limit: 65536K Total Submis ...
- 【BFS】HDU 1495
直达–> HDU 1495 非常可乐 相似题联动–>POJ 3414 Pots 题意:中文题,不解释. 思路:三个杯子倒来倒去,最后能让其中两个平分即可.可能性六种.判定的时候注意第三个杯 ...
- 【动态规划】POJ 1161 & ZOJ1463 & XMU 1033 Brackets sequence
题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1033 http://poj.org/problem?id=1141 ZOJ目前挂了. ...
- 【bfs】抓住那头牛
[题目] 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0≤N≤100000),牛位于点K(0≤K≤100000).农夫有两种移动方式: 1.从X移动到X-1或X+1,每次 ...
- 【bfs】拯救少林神棍(poj1011)
Description 乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位.然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度.请你 ...
- 【bfs】Knight Moves
[题目描述] 输入nn代表有个n×nn×n的棋盘,输入开始位置的坐标和结束位置的坐标,问一个骑士朝棋盘的八个方向走马字步,从开始坐标到结束坐标可以经过多少步. [输入] 首先输入一个nn,表示测试样例 ...
随机推荐
- Ubuntu14.04 64位配置Caffe 教程(基于CUDA7.5)
最新博客地址已转到: http://blog.csdn.net/zzlyw?viewmode=contents ------------------------------------------ ...
- 如何方便的保存WinForm窗体控件的位置大小等等配置信息
由于分辨率.屏幕主题.字体大小的不同,窗体显示效果在不同机器上不尽相同.窗体的弹性设计并不能满足多样的需求.为保证在各种情况下,能有满意的效果.窗体的多样显示方式能改变,并且保存.载入配置,显得很重要 ...
- Python之路,Day6 - Python基础6
本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve xml处理 yaml处理 configpars ...
- win10 安装framework3.5
win+x 点击命令提示符(个管理员) 输入dism.exe /online /enable-feature /featurename:NetFX3 /Source:H:\sources\sxs(解压 ...
- ecshop 不同页面调用不同分类文章的解决办法
调用文章列表,需要修改对应的程序,修改index.php或者arctical_cat.php文件在$smarty->assign('new_articles', index_get_new_ar ...
- tomcat端口被占用问题完美解决方案!
启动Tomcat服务器报错:Several ports (8005, 8080, 8009) required by Tomcat v7.0 Server at localhost are alrea ...
- 【jquery】基础知识
jquery简介 1 jquery是什么 jquery由美国人John Resig创建,至今已吸引了来自世界各地的众多 javascript高手加入其team. jQuery是继prototype之后 ...
- dvd开发小程序
package dvdManager8; import java.util.Scanner; public class DvdSystem8 { static String[][] dvd = new ...
- Django-Admin后台管理
Rhel6.5 Django1.10 Python3.5 应用环境:Python+Virtualenv(Python Virtualenv运行Django环境配置) Django-Admin后台管理 ...
- 女生学Web前端优势往往很明显
学Web前端的女生不算少数,女生学习的成果也往往不比男生差,前端偏向设计.交互和产品方向,需要更加贴合用户,女生心思细腻,对页面细节把控更好,更具美感,对用户心理把握更准,这样的优势往往是男生所不具备 ...