当前位置: 首页 > news >正文

POJ 3414 Pots([kuangbin带你飞]专题一 简单搜索)

题目连接:题目

题目大意:给你A,B两个杯子和一同水,问你能用两个杯子倒出C的水吗,

解题思路,这个题和非常可乐这个题很相似,其实差不多,但是这个题比较麻烦一些,,标记各种情况



#include<cstdio>
#include<iostream>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
int a,b,c;
const int maxn = 100+5;
int r,l,v[maxn][maxn];
pair<int,int> q[maxn*maxn];
int x[maxn*maxn],p[maxn*maxn],op[maxn*maxn],d[maxn*maxn];
void init(){
	memset(x,0,sizeof(x));
	memset(p,0,sizeof(p));
	memset(op,0,sizeof(op));
	memset(d,0,sizeof(d));
}
void check(int i,int j,int o,int k){    //A中的水是i,B中的水是j,操作方法是0,操作的杯子是k 
	if(v[i][j]) return ;
	v[i][j]=1;			//标记当前状态 
	p[r]=l;				//标记当前位置 
	op[r]=o,x[r]=k,d[r]=d[l]+1;	//op记录操作方法,x记录操作的杯子,d记录操作的次数 
	q[r++]=make_pair(i,j); 	//把新状态放在队列里面 
}

int bfs(){
	int ca,cb=l=r=0;
	q[r++]=make_pair(0,0);
	memset(v,0,sizeof(v));
	v[0][0]=1;

	while(r>l){
		ca = q[l].first;
		cb = q[l].second;
		if(ca == c || cb == c) return l;
		check(a,cb,1,1);		//装满A中的水 
		check(ca,b,1,2);		//装满B中的水 
		check(0,cb,2,1);		//倒掉A中的水 
		check(ca,0,2,2);		//倒掉B中的水 
		if(ca > b - cb) check(ca - b + cb , b,3,1);  		//把A中的水倒满B 
		else check(0,ca+cb,3,1);
		if(cb > a - ca ) check(a,cb-a+ca,3,2);				//把B中的水倒满A 
		else check(ca+cb,0,3,2);
		++l;					//队列加一 
	}
	return 0;
}
void print(int k){
	if(p[k]>0) print(p[k]);
	if(op[k] == 1) printf("FILL(%d)\n", x[k]);  
    if(op[k] == 2) printf("DROP(%d)\n", x[k]);  
    if(op[k] == 3) printf("POUR(%d,%d)\n", x[k], 3 - x[k]);
}
int main(){
	while(~scanf("%d%d%d",&a,&b,&c)){
		init();
		int ans=0;
		if(ans=bfs()){
			printf("%d\n",d[ans]);
			print(ans); 
		}else printf("impossible\n");
	}
	return 0;
}


转载于:https://www.cnblogs.com/Double-LL/p/6658896.html

相关文章:

  • 2011年2月TIOBE排名Actionscript3较1月名次上升了19名
  • iOS开发几年了,你清楚OC中的这些东西么!!!?
  • 商业价值:2011年中国企业IT应用趋势10大预测
  • JSON01_资料
  • Windows Phone 7 不温不火学习之《推送通知服务》
  • nodejs学习8:windows连接mongodb出现的错误解决办法
  • NVelocity介绍,NVelocity中文手册文档及实例下载
  • 页面布局
  • ArcGIS Editor for OpenStreetMap
  • ES5——函数,对象,方法,this
  • P2P中的Chord算法
  • Web:AJAX的详解
  • 我,原来也只能这样
  • java 子类继承父类成员变量的隐藏、实现方法的重写
  • 测试流程方法
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • 10个最佳ES6特性 ES7与ES8的特性
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • Elasticsearch 参考指南(升级前重新索引)
  • IDEA 插件开发入门教程
  • Java 23种设计模式 之单例模式 7种实现方式
  • java 多线程基础, 我觉得还是有必要看看的
  • php ci框架整合银盛支付
  • React系列之 Redux 架构模式
  • 动态规划入门(以爬楼梯为例)
  • 关于springcloud Gateway中的限流
  • 浏览器缓存机制分析
  • 模仿 Go Sort 排序接口实现的自定义排序
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 前嗅ForeSpider中数据浏览界面介绍
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • # 执行时间 统计mysql_一文说尽 MySQL 优化原理
  • #【QT 5 调试软件后,发布相关:软件生成exe文件 + 文件打包】
  • $ git push -u origin master 推送到远程库出错
  • ( 10 )MySQL中的外键
  • (10)ATF MMU转换表
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (C#)Windows Shell 外壳编程系列9 - QueryInfo 扩展提示
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)mysql使用Navicat 导出和导入数据库
  • *(长期更新)软考网络工程师学习笔记——Section 22 无线局域网
  • .bat文件调用java类的main方法
  • .FileZilla的使用和主动模式被动模式介绍
  • .NET 3.0 Framework已经被添加到WindowUpdate
  • .NET MVC第三章、三种传值方式
  • .net MySql
  • .net专家(高海东的专栏)
  • @Tag和@Operation标签失效问题。SpringDoc 2.2.0(OpenApi 3)和Spring Boot 3.1.1集成
  • [28期] lamp兄弟连28期学员手册,请大家务必看一下
  • [30期] 我的学习方法
  • [BZOJ4337][BJOI2015]树的同构(树的最小表示法)
  • [C++参考]拷贝构造函数的参数必须是引用类型
  • [C++提高编程](三):STL初识