题意:通过题目给出的三种操作,让任意一个杯子中的水到达一定量

分析:两个杯子最大容量是100,所以开个100*100的数组记录状态,最多1w个状态,所以复杂度很低,然后记录一下路径就好

注:代码写残了,我也不会写好看的那种,罪过罪过..QAQ

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cmath>
#include<map>
#include<queue>
#include<stdlib.h>
#include<string>
#include<set>
using namespace std;
typedef long long LL;
const int maxn=;
const int INF=0x3f3f3f3f;
struct Point
{
int x,y,op,s;
} mp[maxn][maxn],o,t;
int p[maxn][maxn];
queue<Point>q;
void print(int x,int y)
{
if(x==-)return;
print(mp[x][y].x,mp[x][y].y);
if(mp[x][y].op==)printf("FILL(%d)\n",mp[x][y].s);
else if(mp[x][y].op==)printf("DROP(%d)\n",mp[x][y].s);
else if(mp[x][y].op==)printf("POUR(%d,%d)\n",mp[x][y].s,-mp[x][y].s);
}
int main()
{
int a,b,c,flag=;
scanf("%d%d%d",&a,&b,&c);
for(int i=; i<=a; ++i)
for(int j=; j<=b; ++j)
mp[i][j].op=-;
mp[a][].op=,mp[a][].s=;
mp[][b].op=,mp[][b].s=;
mp[a][].x=-,mp[][b].x=-;
o.x=a,o.y=;
q.push(o);
o.x=,o.y=b;
q.push(o);
p[a][]=p[][b]=;
while(!q.empty())
{
o=q.front();
q.pop();
if(o.x==c||o.y==c)
{
t=o;
flag=;
break;
}
if(o.x<a)
{
if(mp[a][o.y].op==-)
{
mp[a][o.y].op=;
mp[a][o.y].s=;
mp[a][o.y].x=o.x;
mp[a][o.y].y=o.y;
t.x=a,t.y=o.y;
p[t.x][t.y]=p[o.x][o.y]+;
q.push(t);
}
}
if(o.y<b)
{
if(mp[o.x][b].op==-)
{
mp[o.x][b].op=;
mp[o.x][b].s=;
mp[o.x][b].x=o.x;
mp[o.x][b].y=o.y;
t.x=o.x,t.y=b;
p[t.x][t.y]=p[o.x][o.y]+;
q.push(t);
}
}
if(o.x)
{
if(mp[][o.y].op==-)
{
mp[][o.y].op=;
mp[][o.y].s=;
mp[][o.y].x=o.x;
mp[][o.y].y=o.y;
t.x=,t.y=o.y;
p[t.x][t.y]=p[o.x][o.y]+;
q.push(t);
}
int cha=b-o.y;
if(o.x<=cha)
t.y=o.y+o.x,t.x=;
else t.y=b,t.x=o.x-cha;
if(mp[t.x][t.y].op==-)
{
mp[t.x][t.y].op=;
mp[t.x][t.y].s=;
mp[t.x][t.y].x=o.x;
mp[t.x][t.y].y=o.y;
p[t.x][t.y]=p[o.x][o.y]+;
q.push(t);
}
}
if(o.y)
{
if(mp[o.x][].op==-)
{
mp[o.x][].op=;
mp[o.x][].s=;
mp[o.x][].x=o.x;
mp[o.x][].y=o.y;
t.x=o.x,t.y=;
p[t.x][t.y]=p[o.x][o.y]+;
q.push(t);
}
int cha=a-o.x;
if(o.y<=cha)
t.x=o.y+o.x,t.y=;
else t.x=a,t.y=o.y-cha;
if(mp[t.x][t.y].op==-)
{
mp[t.x][t.y].op=;
mp[t.x][t.y].s=;
mp[t.x][t.y].x=o.x;
mp[t.x][t.y].y=o.y;
p[t.x][t.y]=p[o.x][o.y]+;
q.push(t);
}
}
}
if(flag)printf("%d\n",p[t.x][t.y]),print(t.x,t.y);
else printf("impossible\n");
return ;
}

POJ3414 Pots BFS搜素的更多相关文章

  1. POJ-3414.Pots.(BFS + 路径打印)

    这道题做了很长时间,一开始上课的时候手写代码,所以想到了很多细节,但是创客手打代码的时候由于疏忽又未将pair赋初值,导致一直输出错误,以后自己写代码可以专心一点,可能会在宿舍图书馆或者Myhome, ...

  2. POJ3414—Pots(bfs加回溯)

    http://poj.org/problem?id=3414                                       Pots Time Limit: 1000MS   Memor ...

  3. POJ3414 Pots —— BFS + 模拟

    题目链接:http://poj.org/problem?id=3414 Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions ...

  4. HDU 1226 超级密码 (搜素)

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1226 题意简单,本来是一道很简单的搜素题目. 但是有两个bug: 1.M个整数可能有重复的. 2.N可 ...

  5. POJ 3414 Pots (BFS/DFS)

    Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7783   Accepted: 3261   Special Ju ...

  6. 开源搜素引擎:Lucene、Solr、Elasticsearch、Sphinx优劣势比较

    https://blog.csdn.net/belalds/article/details/82667692 开源搜索引擎分类 1.Lucene系搜索引擎,java开发,包括: Lucene Solr ...

  7. ACM__搜素之BFS与DFS

    BFS(Breadth_First_Search) DFS(Depth_First_Search) 拿图来说 BFS过程,以1为根节点,1与2,3相连,找到了2,3,继续搜2,2与4,相连,找到了4, ...

  8. POJ-3414 Pots (BFS)

    Description You are given two pots, having the volume of A and B liters respectively. The following ...

  9. poj3414 Pots (BFS)

    Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 12198   Accepted: 5147   Special J ...

随机推荐

  1. 使用struts的模型驱动注意的问题

    注意实体对象的属性命名一定要规范, 例如: private String fName; 添加时模型驱动取不到值 private String fname; 这个可以

  2. ios 中的小技巧 - 总有你想要的 一

    UITableView的Group样式下顶部空白处理 在viewWillAppear里面添加如下代码: //分组列表头部空白处理 CGRect frame = myTableView.tableHea ...

  3. jquery捕捉文本域输入事件

    <input type='text' /> change事件是在文本域光标失去焦点时才会触发,要监听正在输入内容事件用键盘事件监听如果想要捕捉文本域输入事件,可以使用$("inp ...

  4. ACCESS数据库操作教程

    网易学院视频教程: 上:http://tech.163.com/06/0621/17/2K5K0C2200091U6J.html中:http://tech.163.com/06/0621/17/2K5 ...

  5. 动态链接库中分配内存引起的问题-- windows已在XX.exe中触发一个断点

    动态链接库中分配内存引起的 本文主要是探讨关于在动态链接库分配的内存在主程序中释放所产生的问题,该问题是我在刚做的PJP工程中所遇到的,由于刚碰到之时感动比较诡异(这也是学识不够所致),所以将它写下来 ...

  6. Tomcat多次部署

    http://blog.csdn.net/knityster/article/details/6300804

  7. HDU1353+贪心

    注意精度. /* */ #include<stdio.h> #include<string.h> #include<stdlib.h> #include<al ...

  8. Servlet课程0425(五) sendRedirect实现不同页面共享数据

    Login.java //登录界面 package com.tsinghua; import javax.servlet.http.*; import java.io.*; public class ...

  9. Qt: 自动调整到最合适的大小(不是很明白)

    SortDialog::SortDialog(QWidget *parent) : QDialog(parent) { setupUi(this); groupBox_2->hide(); gr ...

  10. Subversion安装和使用

    Subversion(SVN)是优秀的版本控制工具,其具体的的优点和详细介绍,这里就不再多说.SVN分为客户端和服务器端,一般服务器端安装在服务器上,我们开发者用的都是客户端.TortoiseSVN是 ...