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

分析:两个杯子最大容量是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. Tomcat 搭配 Nginx 还是 Apache 呢?

    Apache .Tomcat.Nginx的区别, 哪个与Tomcat搭配效率高? 一. 定义: 1. Apache Apache HTTP服务器是一个模块化的服务器,可以运行在几乎所有广泛使用的计算机 ...

  2. (转载)shell日志分析常用命令

    shell日志分析常用命令总结 时间:2016-03-09 15:55:29来源:网络 导读:shell日志分析的常用命令,用于日志分析的shell脚本,统计日志中百度蜘蛛的抓取量.抓取最多的页面.抓 ...

  3. JVM内存区域模型

    一:Java技术体系模块图 二:JVM内存区域模型 1.方法区 也称"永久代” .“非堆” ,"perm",  它用于存储虚拟机加载的类信息.常量.静态变量.是各个线程共 ...

  4. nginx+ tomcat集群+动静资源分离

    不知道为什么这个随便删不掉,写了也值显示一半一半不显示, 我把重新写了一遍: nginx + tomcat集群和动静资源分离

  5. kill 进程卡住,超时kill方法

    还是有漏洞 ,万一 working.py未超时, kill_job.sh 会不会杀死别人的进程啊start.sh#!/bin/bash python working.py &python wo ...

  6. IOS xib生成界面和代码生成界面两种方式混合

    应用程序代理类 WKAppDelegate.m // // WKAppDelegate.m // HelloWorld // // Created by easy5 on 13-9-18. // Co ...

  7. 如何编写敏捷开发中的user story

    http://blog.csdn.net/chengyb74/article/details/4762247 对于敏捷开发来说,User Story是开发的基础,它不同于传统的瀑布式开发方式,而是把原 ...

  8. PHP session有效期session.gc_maxlifetime的设置方法

    PHP(外文名: Hypertext Preprocessor,中文名:“超文本预处理器”)是一种通用开源脚本语言.语法吸收了C语言.Java和Perl的特点,入门门槛较低,易于学习,使用广泛,主要适 ...

  9. CF 136A Presents

    http://codeforces.com/problemset/problem/136/A 题意 :就是输入很多数字,第 i 个数字 pi 代表着第 i 个人的礼物给了第 pi 个人,而让你输出的数 ...

  10. android 使用Activity做窗口弹出(模拟Dialog)

    我们下面使用Activity,模拟一个dialog: 首先看布局: <?xml version="1.0" encoding="utf-8"?> & ...