Pots POJ 3414
/*
*POJ 3414
*简单模板bfs
*编程应该为了方便理解,尽量提供接口
*/
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<queue>
using namespace std;
const int maxn=1e2+10;
int VA,VB,VC;
bool inq[maxn][maxn];
vector<int>vec;
struct Node{
int a,b,step;//a,b的值,以及步数
vector<int>ope;
Node(){}
Node(int _a,int _b,int _s){
a=_a;
b=_b;
step=_s;
}
};
void fill(int index,int &A,int &B){
if(index==1) A=VA;
else if(index==2) B=VB;
else printf("Illegal operation!\n");
}
void drop(int index,int &A,int &B){
if(index==1) A=0;
else if(index==2) B=0;
else printf("Illegal operation!\n");
}
void pour(int in1,int in2,int &A,int &B){
if(in1==1&&in2==2){
if(A+B>=VB){
A=A+B-VB;
B=VB;
}
else{
B=A+B;
A=0;
}
}
else if(in1==2&&in2==1){
if(A+B>VA){
B=A+B-VA;
A=VA;
}
else{
A=A+B;
B=0;
}
}
}
Node BFS(){
memset(inq,false,sizeof(inq));
queue<Node>que;
que.push(Node(0,0,0));
inq[0][0]=true;
while(!que.empty()){
Node now=que.front();
que.pop();
int a=now.a,b=now.b,step=now.step;
if(a==VC||b==VC) return now;
for(int i=0;i<6;i++){
int tempa=a,tempb=b;
if(i==0) fill(1,tempa,tempb);
else if(i==1) fill(2,tempa,tempb);
else if(i==2) drop(1,tempa,tempb);
else if(i==3) drop(2,tempa,tempb);
else if(i==4) pour(1,2,tempa,tempb);
else if(i==5) pour(2,1,tempa,tempb);
if(inq[tempa][tempb]==false){
Node next=Node(tempa,tempb,step+1);
next.ope=now.ope;
next.ope.push_back(i);
que.push(next);
inq[tempa][tempb]=true;
}
}
}
return Node(-1,-1,-1);
}
int main(){
scanf("%d%d%d",&VA,&VB,&VC);
Node ans=BFS();
if(ans.a==-1) printf("impossible\n");
else{
printf("%d\n",ans.step);
for(int i=0;i<ans.ope.size();i++){
if(ans.ope[i]==0) printf("FILL(1)\n");
else if(ans.ope[i]==1) printf("FILL(2)\n");
else if(ans.ope[i]==2) printf("DROP(1)\n");
else if(ans.ope[i]==3) printf("DROP(2)\n");
else if(ans.ope[i]==4) printf("POUR(1,2)\n");
else if(ans.ope[i]==5) printf("POUR(2,1)\n");
}
}
return 0;
}
Pots POJ 3414的更多相关文章
- Pots(POJ - 3414)【BFS 寻找最短路+路径输出】
Pots(POJ - 3414) 题目链接 算法 BFS 1.这道题问的是给你两个体积分别为A和B的容器,你对它们有三种操作,一种是装满其中一个瓶子,另一种是把其中一个瓶子的水都倒掉,还有一种就是把其 ...
- Pots POJ - 3414 (搜索+记录路径)
Pots Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22688 Accepted: 9626 Special J ...
- kuangbin专题 专题一 简单搜索 Pots POJ - 3414
题目链接:https://vjudge.net/problem/POJ-3414 题意:给你两个杯子,分别容量为A(1),B(2)和一个C,C是需要经过下列操作,得到的一个升数.(1) FILL(i) ...
- Pots POJ - 3414【状态转移bfs+回溯】
典型的倒水问题: 即把两个水杯的每种状态视为bfs图中的点,如果两种状态可以转化,即可认为二者之间可以连一条边. 有3种倒水的方法,对应2个杯子,共有6种可能的状态转移方式.即相当于图中想走的方法有6 ...
- POJ 3414 Pots
Pots Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u Submit Status ...
- 广搜+输出路径 POJ 3414 Pots
POJ 3414 Pots Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13547 Accepted: 5718 ...
- POJ 3414 Pots(罐子)
POJ 3414 Pots(罐子) Time Limit: 1000MS Memory Limit: 65536K Description - 题目描述 You are given two po ...
- poj 3414 Pots 【BFS+记录路径 】
//yy:昨天看着这题突然有点懵,不知道怎么记录路径,然后交给房教了,,,然后默默去写另一个bfs,想清楚思路后花了半小时写了120+行的代码然后出现奇葩的CE,看完FAQ改了之后又WA了.然后第一次 ...
- BFS POJ 3414 Pots
题目传送门 /* BFS:六种情况讨论一下,BFS轻松解决 起初我看有人用DFS,我写了一遍,TLE..还是用BFS,结果特判时出错,逗了好长时间 看别人的代码简直是受罪,还好自己终于发现自己代码的小 ...
随机推荐
- SpringMVC整合Apache Shiro
关于什么是Shiro,可以查看这篇文章http://www.cnblogs.com/Laymen/articles/6117751.html 一.添加maven依赖 <dependency> ...
- CodeForces 948B Primal Sport
Primal Sport 题意:2个人玩游戏, 每次轮到一个人选择一个比当前值小的素数, 然后在找到比素数的倍数中最小的并且不小于当前数的一个数. 现在这个游戏玩了2轮, 现在想找到最小的那个起点X0 ...
- Gym 101470 题解
A:Banks 代码: #include<bits/stdc++.h> using namespace std; #define Fopen freopen("_in.txt&q ...
- NOIP2003[提高组] 加分二叉树 题解
题意 给出一个有n个节点的二叉树的中序遍历,以当前节点为根的树的分数等于左节点分数* 右节点分数+根节点分数,叶子节点的分数等于它本身,求最大分数,以及分数最大的树的先序遍历 一道区间dp题,因为要求 ...
- 手工释放服务器的swap分区缓存
时间 恢复时间 状态 信息 主机 问题 • 严重性 持续时间 确认 动作 2019-03-21 20:29:30 09:51:30 -ai-代理 Lack of free sw ...
- 联邦学习开源框架FATE助力腾讯神盾沙箱,携手打造数据安全合作生态
近日,微众银行联邦学习FATE开源社区迎来了两位新贡献者——来自腾讯的刘洋及秦姝琦,作为云计算安全领域的专家,两位为FATE构造了新的功能点,并在Github上提交修复了相关漏洞.(Github项目地 ...
- SQL查询出距当前时间最近的一条或多条记录。
select * from bas_dredge,(SELECT C_ENTERPRISEID,MAX(D_UTIME) D_LTIME FROM BAS_DREDGE GROUP BY C_ENTE ...
- .Net基础篇_学习笔记_第八天_复杂数据类型(常量/枚举/结构)
1.常量: 声明的常量的语法:const 变量类型 变量名=值;最大的特点就是,声明了常量后,就不能再被重新赋值. 2.枚举 语法:[public] enum 枚举名{ 值1, 值2, 值3, ... ...
- Java 教程(开发环境配置+基础语法)
Java 开发环境配置 在本章节中我们将为大家介绍如何搭建Java开发环境. window系统安装java 下载JDK 首先我们需要下载java开发工具包JDK,下载地址:http://www.ora ...
- Java多线程基础知识例子
一.管理 1.创建线程 Thread public class Main { public static void main(String[] args) { MyThread myThread = ...