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,结果特判时出错,逗了好长时间 看别人的代码简直是受罪,还好自己终于发现自己代码的小 ...
随机推荐
- 牛客练习赛39 D 动态连通块+并查集 X bitset 优化
https://ac.nowcoder.com/acm/contest/368/D 题意 小T有n个点,每个点可能是黑色的,可能是白色的.小T对这张图的定义了白连通块和黑连通块:白连通块:图中一个点集 ...
- 杭电多校第四场 Problem K. Expression in Memories 思维模拟
Problem K. Expression in Memories Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 262144/262 ...
- codeforces 798 C. Mike and gcd problem(贪心+思维+数论)
题目链接:http://codeforces.com/contest/798/problem/C 题意:给出一串数字,问如果这串数字的gcd大于1,如果不是那么有这样的操作,删除ai, ai + 1 ...
- Three.js 开发机房(四)
这一节我们讲讲怎么画机柜,其实机柜如果作的复杂一点.逼真一点可以用3D建模工具,不过一般的项目中也不用做的那么麻烦,那我们就可以将机柜抽象以下,首先它是一块具有长宽高的立方体铁块,然后我们从中间在掏掉 ...
- ubuntu下创建定时任务的两种方式及常见问题解决方案
创建定时任务的目的就是摆脱人为对程序重复性地运行. 0. 首先用下面的指令检查你是否安装crontab, crontab -l 如果本身就有的话,那么出现如下指令 LC_CTYPE="zh_ ...
- Go从入门到放弃
Go语言介绍 为什么你应该学习Go语言? 开发环境准备 从零开始搭建Go语言开发环境 VS Code配置Go语言开发环境 Go语言基础 Go语言基础之变量和常量 Go语言基础之基本数据类型 Go语言基 ...
- IDEA中工程上传到SVN
1.先在IDEA上集成SVN 2.查看SVN仓库:连接SVN ①此时应该先去SVN服务器中新建一个SVN服务: 点击下一步 点击下一步 点击create ②查看SVN仓库 先复制SVN的地址 把复制的 ...
- CNCF 宣布成立应用交付领域小组,正式开启云原生应用时代
作者|赵钰莹 作为云原生领域的顶级开源社区, Cloud Native Computing Foundation (云原生基金会,以下简称 CNCF)近日宣布成立 Application Delive ...
- 3.1、双向循环链表(java实现)
1.创建节点类 public class CNode<T> { public CNode prev; public CNode next; public T data; public CN ...
- windows任务计划定时备份sqlserver数据库
使用windows的任务计划新建一个sqlserver数据库的定时备份任务 一. (我是以sqlserver2008r2数据库版本测试的)在G盘下新建文集夹Database_backup,首 ...