题目地址:http://poj.org/problem?id=3414

Pots
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 12080   Accepted: 5104   Special Judge

Description

You are given two pots, having the volume of A and B liters respectively. The following operations can be performed:

  1. FILL(i)        fill the pot i (1 ≤ i ≤ 2) from the tap;
  2. DROP(i)      empty the pot i to the drain;
  3. POUR(i,j)    pour from pot i to pot j; after this operation either the pot j is full (and there may be some water left in the pot i), or the pot i is empty (and all its contents have been moved to the pot j).

Write a program to find the shortest possible sequence of these operations that will yield exactly C liters of water in one of the pots.

Input

On the first and only line are the numbers A, B, and C. These are all integers in the range from 1 to 100 and C≤max(A,B).

Output

The first line of the output must contain the length of the sequence of operations K. The following K lines must each describe one operation. If there are several sequences of minimal length, output any one of them. If the desired result can’t be achieved, the first and only line of the file must contain the word ‘impossible’.

Sample Input

3 5 4

Sample Output

6
FILL(2)
#include<stdio.h>
#include<string.h>
#include <queue>
#include <stack>
#include <algorithm> using namespace std; int a, b, c;//a b容器的大小 c目标体积 bool vis[101][101]; struct node
{
char ch;
int x,y;
int pre;
int self;
}op[100000];
int e=0; struct path
{
int u, v;
int cnt;
int pre;
int self;
}; //int road[10000], step; stack<int>p;
bool ok;
int ans; void bfs()
{
queue<path>q;//创建队列
memset(vis, false, sizeof(vis));//初始化未访问 path s; s.u=0; s.v=0; s.cnt=0; s.pre=-1; s.self=-1;
q.push(s); int num=-1;
vis[0][0]=true; ok=false; ans=0; while(!q.empty())
{
path cur=q.front(); q.pop(); if(cur.u==c || cur.v==c){
ans=cur.cnt;
ok=true;
int fa=cur.self;
while(fa!=-1){
p.push(fa);
fa=op[fa].pre;
}
break;
}//如果找到了目标状态 //进行6种操作
path temp;
//Fill A
temp=cur; temp.u=a; temp.cnt=cur.cnt+1;
if(!vis[temp.u][temp.v]){
temp.pre=cur.self; num++; temp.self=num;
q.push(temp);
vis[temp.u][temp.v]=true;//标记状态访问
op[e].pre=cur.self;
op[e].ch='F'; op[e++].x=1;
} //File B
temp=cur; temp.v=b; temp.cnt=cur.cnt+1;
if(!vis[temp.u][temp.v]){
temp.pre=cur.self; num++; temp.self=num;
q.push(temp);
vis[temp.u][temp.v]=true;
op[e].pre=cur.self;
op[e].ch='F'; op[e++].x=2;
} //Drop A
temp=cur; temp.u=0; temp.cnt=cur.cnt+1;
if(!vis[temp.u][temp.v]){
temp.pre=cur.self; num++; temp.self=num;
q.push(temp);
vis[temp.u][temp.v]=true;
op[e].pre=cur.self;
op[e].ch='D'; op[e++].x=1;
}
//Drop B
temp=cur; temp.v=0; temp.cnt=cur.cnt+1;
if(!vis[temp.u][temp.v]){
temp.pre=cur.self; num++; temp.self=num;
q.push(temp);
vis[temp.u][temp.v]=true;
op[e].pre=cur.self;
op[e].ch='D'; op[e++].x=2;
} //pour(A, B)
temp.v=cur.u+cur.v; temp.u=0; temp.cnt=cur.cnt+1;
if(temp.v>b){
temp.v=b;//装满B
temp.u=cur.u+cur.v-b;
}
if(!vis[temp.u][temp.v]){
temp.pre=cur.self; num++; temp.self=num;
q.push(temp);
vis[temp.u][temp.v]=true;
op[e].pre=cur.self;
op[e].ch='P'; op[e].x=1; op[e++].y=2;
} //pour(B, A)
temp.u=cur.u+cur.v; temp.v=0; temp.cnt=cur.cnt+1;
if(temp.u>a){
temp.u=a;//装满A
temp.v=cur.u+cur.v-a;
}
if(!vis[temp.u][temp.v]){
temp.pre=cur.self; num++; temp.self=num;
q.push(temp);
vis[temp.u][temp.v]=true;
op[e].pre=cur.self;
op[e].ch='P'; op[e].x=2; op[e++].y=1;
} }
} int main()
{
scanf("%d %d %d", &a, &b, &c);
e=0;
bfs(); if(!ok){
printf("impossible\n");
}
else{
printf("%d\n", ans);
while(!p.empty())
{
int dd=p.top(); p.pop(); if(op[dd].ch=='F'){
printf("FILL(%d)\n", op[dd].x );
}
else if(op[dd].ch=='D'){
printf("DROP(%d)\n", op[dd].x );
}
else{
printf("POUR(%d,%d)\n", op[dd].x, op[dd].y );
}
}
} return 0;
}
POUR(2,1) DROP(1) POUR(2,1) FILL(2) POUR(2,1)

代码:

poj 3414 Pots【bfs+回溯路径 正向输出】的更多相关文章

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

    题意: 给你两个空瓶子,只有三种操作 一.把一个瓶子灌满 二.把一个瓶子清空 三.把一个瓶子里面的水灌到另一个瓶子里面去(倒满之后要是还存在水那就依然在那个瓶子里面,或者被灌的瓶子有可能没满) 思路: ...

  2. POJ 3414--Pots(BFS+回溯路径)

    Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 9963   Accepted: 4179   Special Ju ...

  3. poj 3414 Pots(bfs+输出路径)

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

  4. POJ 3414 Pots bfs打印方案

    题目: http://poj.org/problem?id=3414 很好玩的一个题.关键是又16ms 1A了,没有debug的日子才是好日子.. #include <stdio.h> # ...

  5. POJ - 3414 Pots BFS(著名倒水问题升级版)

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

  6. POJ 3414 Pots(BFS)

    Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Description You are g ...

  7. POJ 3414 Pots (BFS/DFS)

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

  8. poj 3414 Pots bfs+模拟

    #include<iostream> #include<cstring> #define fillA 1 #define pourAB 2 #define dropA 3 #d ...

  9. poj 3414 Pots 【BFS+记录路径 】

    //yy:昨天看着这题突然有点懵,不知道怎么记录路径,然后交给房教了,,,然后默默去写另一个bfs,想清楚思路后花了半小时写了120+行的代码然后出现奇葩的CE,看完FAQ改了之后又WA了.然后第一次 ...

随机推荐

  1. ASCII码表(0-255)

  2. CodeIgniter框架——函数(时间函数、装载函数)剖析+小知识点

    连接数据库: 格式: mysql -h主机地址 -u用户名-p用户密码 数据库的提示符:mysql> 退出数据库: exit(回车) 知识点积累: 1.date_default_timezone ...

  3. jetty;tomcat;热部署

    [说明]今天上午进行了jetty的插件部署,下午进行了tomcat的插件部署,晚上有其它事情需要回校 一:今日完成 1)搞定插件直接部署到jetty 2)搞定插件直接部署到tomcat 3)了解了一下 ...

  4. MVC action 执行两次 background url()

    大年初七第一天上班就来解决问题,我也是醉了. 其实是历史遗留问题,今天看到后不能忍了,赶紧解决一下. 旧系统中以一个微信版本的列表页面没有问题,在新系统中重新开发一边后发现列表页面的action总是请 ...

  5. Cocos2d-x Lua中多场景切换生命周期

    在多个场景切换时候,场景的生命周期会更加复杂.这一节我们介绍一下场景切换生命周期.多个场景切换时候分为几种情况:情况1,使用pushScene函数从实现GameScene场景进入SettingScen ...

  6. &#x编码转换成汉字

    import java.io.UnsupportedEncodingException; public class UnicodeDecoder { public static String esca ...

  7. Oracle 物理体系

    Oracle  物理体系 Oracle 物理体系 问题 参考资料   Oracle 物理体系       PGA:program global area ,私有不共享内存. PGA起到预处理的作用: ...

  8. 关于Apache Shiro权限框架的一些使用误区的解释

    多了不说了,进入正题,shiro是个权限框架提供权限管理等功能,网上的教程一般都是互相抄,比如<shiro:principal property="xxx"/>这个标签 ...

  9. 机器重启 查看crontab执行历史记录crontab没有执行

    Sep 17 19:01:01 d run-parts(/etc/cron.hourly)[8452]: finished 0anacronSep 17 19:10:01 d CROND[9059]: ...

  10. git github usage

    以gerrit-trigger-plugin为例,下面的链接都是从相应页面上直接拷贝的. 法一:不用github的账号,打开这个库在github上的主页,运行下面命令即可 read only 运行命令 ...