直达 —> 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. 如何灵活运用Linux 进程资源监控和进程限制

    导读 每个 Linux 系统管理员都应该知道如何验证硬件.资源和主要进程的完整性和可用性.另外,基于每个用户设置资源限制也是其中一项必备技能. 在这篇文章中,我们会介绍一些能够确保系统硬件和软件正常工 ...

  2. phpcms 表单提交发送邮件

    修改 phpcms\modules\formguide index.php 找到 foreach ($mails as $m) { sendmail($m, L('tips'), $this-> ...

  3. Cosmos —— Big Data at Microsoft

    1, 1,cosmos stores. Cosmos stores data as streams – a file-like structure Streams are split apart in ...

  4. 我的bootstrapTable的应用

    $(function () { //$('#table').attr("data-url", "/conference/" + location.href.sp ...

  5. 那些PHP中没有全称的简写

    PHP中的GD库,全网没发现GD二字母的全称是什么,包括PHP.net,都搜不到GD.G应该是graphi,D是什么? die: 从php_mysql.dll到php_mysqli的变化,那个i是什么 ...

  6. ffmpeg-20160929-bin.7z

    ESC 退出 0 进度条开关 1 屏幕原始大小 2 屏幕1/2大小 3 屏幕1/3大小 4 屏幕1/4大小 5 屏幕横向放大 20 像素 6 屏幕横向缩小 20 像素 S 下一帧 [ -2秒 ] +2 ...

  7. IDEA tomcat乱码

    在运行/调试 配置对话框的Startup/Connection面板中, 勾选Pass environment variables. 并添加一个environment variable, Name填 J ...

  8. RecyclerView的使用之多种Item加载布局

    精益求精,为了更加透彻熟练得掌握,本文再次给大家介石介绍下如何利用RecyclerView实现多Item布局的加载,多Item布局的加载的意思就是在开发过程中List的每一项可能根据需求的不同会加载不 ...

  9. MySQL的一些知识。

    新MySQL而言:对于myisam引擎的表select默认是会锁定该表(共享锁)的 ,会导致其他操作挂起,处于等待状态.对于innodb引擎的表select默认是不会锁表(也不会锁行,简而言之就是不加 ...

  10. iOS 通信常用小功能

    打电话 a.最简单最直接的方式:直接跳到拨号界面 NSURL *url = [NSURL URLWithString:@"tel://10010"]; [[UIApplicatio ...