直达 —> POJ 3414 Pots

相似题联动–>HDU 1495 非常可乐

题意:两个壶倒水,三种操作,两个桶其中一个满足等于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的更多相关文章

  1. 【BFS】POJ 3278

    POJ 3278 Catch That Cow 题目:你要去抓一头牛,给出你所在的坐标和牛所在的坐标,移动方式有两种:要么前一步或者后一步,要么移动到现在所在坐标的两倍,两种方式都要花费一分钟,问你最 ...

  2. 【BFS】POJ 2251

    POJ 2251 Dungeon Master 题意:有一个地图,三维,走的方向是上下,左右,前后.问你最小步数从起始点走到出口. 思路:三维的BFS,就是多加一组状态,需要细心(不细心如我就找了半个 ...

  3. 【bfs】 poj 3984 maze 队列存储

    #include <iostream> #include <stdio.h> #include <cstring> #define Max 0x7f7f7f7f u ...

  4. poj3278-Catch That Cow 【bfs】

    http://poj.org/problem?id=3278 Catch That Cow Time Limit: 2000MS   Memory Limit: 65536K Total Submis ...

  5. 【BFS】HDU 1495

    直达–> HDU 1495 非常可乐 相似题联动–>POJ 3414 Pots 题意:中文题,不解释. 思路:三个杯子倒来倒去,最后能让其中两个平分即可.可能性六种.判定的时候注意第三个杯 ...

  6. 【动态规划】POJ 1161 & ZOJ1463 & XMU 1033 Brackets sequence

    题目链接: http://acm.xmu.edu.cn/JudgeOnline/problem.php?id=1033 http://poj.org/problem?id=1141 ZOJ目前挂了. ...

  7. 【bfs】抓住那头牛

    [题目] 农夫知道一头牛的位置,想要抓住它.农夫和牛都位于数轴上,农夫起始位于点N(0≤N≤100000),牛位于点K(0≤K≤100000).农夫有两种移动方式: 1.从X移动到X-1或X+1,每次 ...

  8. 【bfs】拯救少林神棍(poj1011)

    Description 乔治拿来一组等长的木棒,将它们随机地砍断,使得每一节木棍的长度都不超过50个长度单位.然后他又想把这些木棍恢复到为裁截前的状态,但忘记了初始时有多少木棒以及木棒的初始长度.请你 ...

  9. 【bfs】Knight Moves

    [题目描述] 输入nn代表有个n×nn×n的棋盘,输入开始位置的坐标和结束位置的坐标,问一个骑士朝棋盘的八个方向走马字步,从开始坐标到结束坐标可以经过多少步. [输入] 首先输入一个nn,表示测试样例 ...

随机推荐

  1. Ajax加载菊花loding效果

    Ajax 异步请求的时候,一般都会利用一个动态的 gif小图片来制作一个Ajax Loading ,以便增加用户体验. 这里我们使用Spin.js ,该 js 脚本压缩后5k,可以不用任何图片,任何外 ...

  2. BeanUtils.populate(obj, map);

    public static void populate(Object bean, Map<String, ? extends Object> properties) throws Ille ...

  3. Moving Average from Data Stream

    Given a stream of integers and a window size, calculate the moving average of all integers in the sl ...

  4. UiAutomator--UiAutomatorHelper快速调试

    UiAutomatorHelper使用    1.介绍:他是一种可以快速调试的方法:其本身也是java问津相当于自动化脚本,查看该文件,其主要实现的功能如下 1.创建build:android cre ...

  5. [Sass]不同样式风格的输出方法

    [Sass]不同样式风格的输出方法 众所周知,每个人编写的 CSS 样式风格都不一样,有的喜欢将所有样式代码都写在同一行,而有的喜欢将样式分行书写.在 Sass 中编译出来的样式风格也可以按不同的样式 ...

  6. 搭建Nginx+Java环境测试并且运行

    一.简介: Tomcat在高并发环境下处理动态请求时性能很低,而在处理静态页面更加脆弱.虽然Tomcat的最新版本支持epoll,但是通过Nginx来处理静态页面要比通过Tomcat处理在性能方面好很 ...

  7. No plugin found for prefix 'mybatis-generator' in the current project

    http://blog.csdn.net/you23hai45/article/details/50792430 1.错误描述 F:\workspaces\Mybatis>mvn mybatis ...

  8. pip 安装插件慢的解决方法

    有的时候在服务器上使用pip3安装插件比较慢. 本人非常痛苦,后经指点使用国内的源就好了...效果杠杠的... 以下为使用方法: pip3 install paramiko -i http://mir ...

  9. docker搭建Hadoop集群

    一个分布式系统基础架构,由Apache基金会所开发. 用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群的威力高速运算和存储. 首先搭建Docker环境,Docker版本大于1.3. ...

  10. ExtJS 中类的继承

    ExtJS 允许对现有的类进行扩展,其扩展可以通过继承来实现.接下来我们就对刚刚使用ExtJS定义的Person类进行继承,定义一个Developer类,它继承自Person,同时还拥有Coding方 ...