博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
poj 3414 Pots (bfs+线索)
阅读量:6431 次
发布时间:2019-06-23

本文共 3570 字,大约阅读时间需要 11 分钟。

Pots
Time Limit: 1000MS   Memory Limit: 65536K
Total Submissions: 10071   Accepted: 4237   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 ≤ ≤ 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 AB, 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

6FILL(2)POUR(2,1)DROP(1)POUR(2,1)FILL(2)POUR(2,1)

思路:一共同拥有6种操作:把A中水倒掉,把A加满,把B里的水倒入A中。B和A类似。

罐子最大容积为100,设一个常量N=100, 开一个二维数组记录状态变化的值。

1、从水龙头往A里加水t,记录-t,

2、从水龙头往B里加水t,记录-t-N,

3、从B里面往A加水t,记录t

4、从A里面往B加水t。记录N+t

5、把A里水倒掉,记录2*N+t,(A原有水t)

6、把B里水倒掉,记录3*N+t,(B原有水t)

#include
#include
#include
#include
#include
using namespace std;#define N 105const int inf=0x1f1f1f1f;int a,b,c,flag;int mark[N][N];struct node{ int x,y,t; friend bool operator<(node a,node b) { return a.t>b.t; }};void prif(int x,int y) //递归输出路径{ if(x==0&&y==0) return ; if(mark[x][y]>3*N) { prif(x,mark[x][y]-3*N); printf("DROP(2)\n"); } else if(mark[x][y]>2*N) { prif(mark[x][y]-2*N,y); printf("DROP(1)\n"); } else if(mark[x][y]>N) { int tmp=mark[x][y]-N; prif(x+tmp,y-tmp); printf("POUR(1,2)\n"); } else if(mark[x][y]>0) { int tmp=mark[x][y]; prif(x-tmp,y+tmp); printf("POUR(2,1)\n"); } else if(mark[x][y]>-N) { int tmp=-mark[x][y]; prif(x-tmp,y); printf("FILL(1)\n"); } else if(mark[x][y]<-N) { int tmp=N+mark[x][y]; prif(x,y+tmp); printf("FILL(2)\n"); }}void bfs(){ priority_queue
q; node cur,next; mark[0][0]=inf; //该状态仅仅能出现一次。赋值为inf防止干扰其它值 mark[a][0]=-a; mark[0][b]=-b-N; cur.t=1; cur.x=a; cur.y=0; q.push(cur); cur.x=0; cur.y=b; q.push(cur); while(!q.empty()) { cur=q.top(); q.pop(); next.t=cur.t+1; if(cur.x==c||cur.y==c) { flag=1; printf("%d\n",cur.t); prif(cur.x,cur.y); return ; } if(cur.x
0) //来自B的水 { int tmp=min(cur.y,a-cur.x); next.x=cur.x+tmp; next.y=cur.y-tmp; if(!mark[next.x][next.y]) { mark[next.x][next.y]=tmp; q.push(next); } } } if(cur.y
0) //来自A的水 { int tmp=min(cur.x,b-cur.y); next.y=cur.y+tmp; next.x=cur.x-tmp; if(!mark[next.x][next.y]) { mark[next.x][next.y]=tmp+N; q.push(next); } } } if(cur.x>0) //倒掉水 { int tmp=cur.x; next.x=0; next.y=cur.y; if(!mark[next.x][next.y]) { mark[next.x][next.y]=2*N+tmp; q.push(next); } } if(cur.y>0) { int tmp=cur.y; next.y=0; next.x=cur.x; if(!mark[next.x][next.y]) { mark[next.x][next.y]=3*N+tmp; q.push(next); } } }}int main(){ while(scanf("%d%d%d",&a,&b,&c)!=-1) { memset(mark,0,sizeof(mark)); flag=0; bfs(); if(!flag) printf("impossible\n"); } return 0;}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

你可能感兴趣的文章
论文的构思!姚小白的html5游戏设计开发与构思----给审核我论文的导师看的
查看>>
Android error:No CPU/ABI system image available for this target
查看>>
Jenkins(二)
查看>>
wsgi-restful-routes具体解释:
查看>>
Linux C语言写的超级简单port扫描器
查看>>
LinearGradient线性渲染
查看>>
MVC5+EF6 入门完整教程 总目录
查看>>
OAF中trunc函数的使用(转)
查看>>
mysql主从复制实现数据库同步
查看>>
数据结构和算法学习四,之内存
查看>>
TCP在三次握手协议和四波(图)
查看>>
动态规划 简单的分割问题的解决方案钢棒
查看>>
东大OJ-1588: Routing Table
查看>>
CactiEZ 中文版V10.1安装使用以及139邮箱短信报警设置
查看>>
Xilinx发布新版SDAccel开发环境加速数据中心应用
查看>>
Oracle PLSQL Demo - 01.定义变量、打印信息
查看>>
把图片生成Base64字符串
查看>>
突破LVS瓶颈,LVS Cluster部署(OSPF + LVS) - lxcong的运维技术 - 开源中国社区
查看>>
花生壳宣布网站的网址直接绑定到详细的项目——jboss版本
查看>>
问题-[Delphi]在对GRID设置单击为编辑时,其他GRID可以,但有一个GRID不行?
查看>>