Poj3414广泛搜索
<span style="color:#330099;">/*
D - D
Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u
Submit Status Practice POJ 3414
Description
You are given two pots, having the volume of A and B liters respectively. The following operations can be performed: FILL(i) fill the pot i (1 ≤ i ≤ 2) from the tap;
DROP(i) empty the pot i to the drain;
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)
POUR(2,1)
DROP(1)
POUR(2,1)
FILL(2)
POUR(2,1)
By Grant Yuan
2014.7.14
poj 3414
广搜
*/
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
using namespace std;
bool flag=0;
int next[6]={0,1,2,3,4,5};
int a,b,c;
int aa,bb,cc;
typedef struct{
int a;
int b;
int f;
int sum;
int ope;
}node;
int res;
node q[10000];
bool mark[101][101];
int top,base;
int top1;
int s[10000];
bool can(int x1,int y1)
{
if(x1>=0&&x1<=aa&&y1>=0&&y1<=bb&&mark[x1][y1]==0)
return 1;
return 0;
} void slove()
{ int a1,b1,f1,a2,b2;
while(top>=base){//cout<<"zhang"<<endl;
if(q[base].a==cc||q[base].b==cc){
flag=1;
res=q[base].sum;
break;
}
for(int i=0;i<6;i++){
if(i==0)
{ a1=aa;
b1=q[base].b;
if(can(a1,b1)){
q[++top].a=a1;
q[top].b=b1;
q[top].f=base;
q[top].sum=q[base].sum+1;
q[top].ope=i;
mark[a1][b1]=1;} }
else if(i==1)
{
a1=q[base].a;
b1=bb;
if(can(a1,b1)){
q[++top].a=a1;
q[top].b=b1;
q[top].f=base;
q[top].sum=q[base].sum+1;
q[top].ope=i;
mark[a1][b1]=1;}
}
else if(i==2)//1dao2
{ int m,n;
m=q[base].a;
n=bb-q[base].b;
if(m>=n){
a1=m-n;
b1=bb;
if(can(a1,b1)){
q[++top].a=a1;
q[top].b=b1;
q[top].f=base;
q[top].sum=q[base].sum+1;
q[top].ope=i;
mark[a1][b1]=1;} }
else{
a1=0;
b1=m+q[base].b;
if(can(a1,b1)){
q[++top].a=a1;
q[top].b=b1;
q[top].f=base;
q[top].sum=q[base].sum+1;
q[top].ope=i;
mark[a1][b1]=1;}
}}
else if(i==3)//1dao2
{ int m,n;
m=aa-q[base].a;
n=q[base].b;
if(n>=m){
a1=aa;
b1=n-m;
if(can(a1,b1)){
q[++top].a=a1;
q[top].b=b1;
q[top].f=base;
q[top].sum=q[base].sum+1;
q[top].ope=i;
mark[a1][b1]=1;} }
else{
b1=0;
a1=n+q[base].a;
if(can(a1,b1)){
q[++top].a=a1;
q[top].b=b1;
q[top].f=base;
q[top].sum=q[base].sum+1;
q[top].ope=i;
mark[a1][b1]=1;}
}}
else if(i==4)
{
a1=0;
b1=q[base].b;
if(can(a1,b1)){
q[++top].a=a1;
q[top].b=b1;
q[top].f=base;
q[top].sum=q[base].sum+1;
q[top].ope=i;
mark[a1][b1]=1;
}}
else if(i==5)
{
b1=0;
a1=q[base].a;
if(can(a1,b1)){
q[++top].a=a1;
q[top].b=b1;
q[top].f=base;
q[top].sum=q[base].sum+1;
q[top].ope=i;
mark[a1][b1]=1;
}
} }
base++;
}}
void print()
{ top1=-1;
int i=base,j;
while(1){
s[++top1]=q[i].ope;
j=q[i].f;
i=j;
if(i==0)
break;
}
for(j=top1;j>=0;j--)
{
if(s[j]==0)
cout<<"FILL(1)"<<endl;
else
if(s[j]==1)
cout<<"FILL(2)"<<endl;
else
if(s[j]==2)
cout<<"POUR(1,2)"<<endl;
else
if(s[j]==3)
cout<<"POUR(2,1)"<<endl;
else
if(s[j]==4)
cout<<"DROP(1)"<<endl;
else
if(s[j]==5)
cout<<"DROP(2)"<<endl;
}
}
int main()
{
cin>>aa>>bb>>cc;
top=-1;
memset(mark,0,sizeof(mark));
mark[0][0]=1;
base=0;
q[++top].a=0;
q[top].b=0;
q[top].f=0;
q[top].sum=0;
q[top].ope=0;
slove();
if(flag==0) cout<<"impossible"<<endl;
else{cout<<res<<endl;
print();}
return 0; }
</span>
版权声明:本文博客原创文章。博客,未经同意,不得转载。
Poj3414广泛搜索的更多相关文章
- 【转】ACM训练计划
[转] POJ推荐50题以及ACM训练方案 -- : 转载自 wade_wang 最终编辑 000lzl POJ 推荐50题 第一类 动态规划(至少6题, 和 必做) 和 (可贪心) (稍难) 第二类 ...
- ACM训练计划step 2 [非原创]
(Step2-500题)POJ训练计划+SGU 经过Step1-500题训练,接下来可以开始Step2-500题,包括POJ训练计划的298题和SGU前两章200题.需要1-1年半时间继续提高解决问题 ...
- POJ训练计划
POJ训练计划 Step1-500题 UVaOJ+算法竞赛入门经典+挑战编程+USACO 请见:http://acm.sdut.edu.cn/bbs/read.php?tid=5321 一.POJ训练 ...
- SQLSERVER走起微信公众帐号已经开通搜狗微信搜索
SQLSERVER走起微信公众帐号已经开通搜狗微信搜索 请打开下面链接 http://weixin.sogou.com/gzh?openid=oIWsFt-hiIb_oYqQHaBMoNwRB2wM ...
- solr_架构案例【京东站内搜索】(附程序源代码)
注意事项:首先要保证部署solr服务的Tomcat容器和检索solr服务中数据的Tomcat容器,它们的端口号不能发生冲突,否则web程序是不可能运行起来的. 一:solr服务的端口号.我这里的sol ...
- SQLServer地址搜索性能优化例子
这是一个很久以前的例子,现在在整理资料时无意发现,就拿出来再改写分享. 1.需求 1.1 基本需求: 根据输入的地址关键字,搜索出完整的地址路径,耗时要控制在几十毫秒内. 1.2 数据库地址表结构和数 ...
- HTML5轻松实现搜索框提示文字点击消失---及placeholder颜色的设置
在做搜索框的时候无意间发现html5的input里有个placeholder属性能轻松实现提示文字点击消失功能,之前还傻傻的在用js来实现类似功能... 示例 <form action=&quo ...
- bzoj1079--记忆化搜索
题目大意:有n个木块排成一行,从左到右依次编号为1~n.你有k种颜色的油漆,其中第i种颜色的油漆足够涂ci个木块.所有油漆刚好足够涂满所有木块,即c1+c2+...+ck=n.相邻两个木块涂相同色显得 ...
- bzoj3208--记忆化搜索
题目大意: 花花山峰峦起伏,峰顶常年被雪,Memphis打算帮花花山风景区的人员开发一个滑雪项目. 我们可以把风景区看作一个n*n的地图,每个点有它的初始高度,滑雪只能从高处往低处滑[严格大于] ...
随机推荐
- 自顶向下分析Binder【1】—— Binder实例篇
欢迎转载,转载请注明:http://blog.csdn.net/zhgxhuaa 一个Binder实例 我们Binder的学习将从以下的一个实例開始.依据Android文档中的描写叙述,创建一个Bin ...
- poj1797(最短路小变形)
题目连接:http://poj.org/problem?id=1797 题意: 分析:dp[i]表示到达i点的过程中的最大承受重量,更新到i点时可能有多条路径,由优先队列堆出最大的那条即可. #inc ...
- Ubuntu——grub rescue 主引导修复
长期使用windows 和 ubuntu 人双系统,很可能遇到沉重的一个系统,或以其他方式加盟分区,导致系统重新启动时 : GRUB loading error:unknow filesystem g ...
- 服务器编程入门(4)Linux网络编程基础API
问题聚焦: 这节介绍的不仅是网络编程的几个API 更重要的是,探讨了Linux网络编程基础API与内核中TCP/IP协议族之间的关系. 这节主要介绍三个方面的内容:套接字( ...
- 【译】ASP.NET MVC 5 教程 - 11:Details 和 Delete 方法详解
原文:[译]ASP.NET MVC 5 教程 - 11:Details 和 Delete 方法详解 在教程的这一部分,我们将研究一下自动生成的 Details 和Delete 方法. Details ...
- DataInputStream类readLong()引起的思考
今天无意中看了下jdk中的DataInputStream类,然后看到readLong()方法,如下: private byte readBuffer[] = new byte[8]; public f ...
- 从Rational Rose 到IBM Rational Software Architect和IBM Rational Rhapsody
2014/10/27 RSA升级,重装,不知怎么搞的,不能添加某些图(比如,活动图),重试了几次都不行,在其它电脑上没有问题.后来把其它电脑上的workspace复制过来,问题攻克了,原来是works ...
- BZOJ 3531: [Sdoi2014]旅游
职务地址:http :// www . lydsy . com / JudgeOnline / problem . php ? id = 3531 标题效果:看到原来的标题. 算法讨论:树链拆分. 就 ...
- codeforces 459D - Pashmak and Parmida's problem【离散化+处理+逆序对】
题目:codeforces 459D - Pashmak and Parmida's problem 题意:给出n个数ai.然后定义f(l, r, x) 为ak = x,且l<=k<=r, ...
- 大并发连接的oracle在Linux下内存不足的问题的分析(转)
最近一台装有Rhel5.3的40G内存的机器上有一个oracle数据库,数据库的SGA设置为20G,当运行业务时,一个业务高峰期时,发现swap频繁交换,CPU 100%,Load很高,基本体现为内存 ...