POJ - 3414 bfs [kuangbin带你飞]专题一
状态搜索,每种状态下面共有六种选择,将搜索到的状态保存即可。
d[i][j]表示状态A杯中水i升,B杯中水j升,总状态数量不会超过A杯的容量 * B杯的容量。
AC代码
#include<cstdio> #include<cstring> #include<algorithm> #include<queue> #include<string> #include<algorithm> #include<iostream> using namespace std; const int maxn = 100 + 5; struct node{ int A, B; //当前状态 string op; node(){ } node(int a, int b, string op):A(a), B(b), op(op){ } }pre[maxn][maxn]; int d[maxn][maxn], a, b, c; void print(int x, int y){ //printf("%d %d\n", x, y); int px = pre[x][y].A, py = pre[x][y].B; if(px == -1 && py == -1) return; print(px, py); cout << pre[x][y].op << endl; } int bfs(){ int cup[] = {a, b}; memset(d, -1, sizeof(d)); d[0][0] = 0; queue<node>q; q.push(node(0, 0, "")); pre[0][0] = node(-1, -1, ""); while(!q.empty()) { node p = q.front(); q.pop(); if(p.A == c || p.B == c){ printf("%d\n", d[p.A][p.B]); print(p.A, p.B); return 1; } int w[] = {p.A, p.B}; for(int i = 0; i < 2; ++i) for(int j = 0; j < 2; ++j) { if(i == j) continue; //Fill w[0] = p.A, w[1] = p.B; w[i] = cup[i]; if(d[w[0]][w[1]] == -1) { d[w[0]][w[1]] = d[p.A][p.B] + 1; string op = ""; if(i == 0) op = "FILL(1)"; else op = "FILL(2)"; q.push(node(w[0], w[1], "")); pre[w[0]][w[1]] = node(p.A, p.B, op); } //Drop w[0] = p.A, w[1] = p.B; w[i] = 0; if(d[w[0]][w[1]] == -1) { d[w[0]][w[1]] = d[p.A][p.B] + 1; string op = ""; if(i == 0) op = "DROP(1)"; else op = "DROP(2)"; q.push(node(w[0], w[1], "")); pre[w[0]][w[1]] = node(p.A, p.B, op); } //Pour w[0] = p.A, w[1] = p.B; int pour = min(w[i], cup[1 - i] - w[1 - i]); w[i] -= pour, w[1 -i] += pour; if(d[w[0]][w[1]] == -1) { d[w[0]][w[1]] = d[p.A][p.B] + 1; string op = ""; if(i == 0) op = "POUR(1,2)"; else op = "POUR(2,1)"; q.push(node(w[0], w[1], "")); pre[w[0]][w[1]] = node(p.A, p.B, op); } } } return 0; } int main(){ while(scanf("%d%d%d", &a, &b, &c) == 3){ if(!bfs()) printf("impossible\n"); } return 0; }
如有不当之处欢迎指出!
POJ - 3414 bfs [kuangbin带你飞]专题一的更多相关文章
- POJ - 2251 bfs [kuangbin带你飞]专题一
立体bfs,共有六个方向: const int dx[] = {0,0,1,-1,0,0}; const int dy[] = {1,-1,0,0,0,0}; const int dz[] = {0, ...
- POJ - 3984 bfs [kuangbin带你飞]专题一
bfs搜索过程中将路径保存下即可. AC代码 #include<cstdio> #include<cstring> #include<algorithm> #inc ...
- HDU - 3533 bfs [kuangbin带你飞]专题二
看了好久的样例才看懂. 题意:有一个人要从(0,0)走到(n,m),图中有k个碉堡,每个碉堡可以向某个固定的方向每隔t秒放一次炮,炮弹不能穿越另一个碉堡,会被阻挡.人在移动的过程中不会被炮弹打到,也就 ...
- HDU - 2102 A计划 (BFS) [kuangbin带你飞]专题二
思路:接BFS判断能否在限制时间内到达公主的位置,注意如果骑士进入传送机就会被立即传送到另一层,不会能再向四周移动了,例如第一层的位置(x, y, 1)是传送机,第二层(x, y, 2)也是传送机,这 ...
- UVA - 11624 多点bfs [kuangbin带你飞]专题一
题意:某人身陷火场,总有k个点着火,着火点可向四周扩散,问此人能否逃离. 思路:可能有多个着火点,以这些着火点作为起点进行bfs,得到整个火场的最短距离,然后又以人所在坐标作为起点进行bfs,得到该人 ...
- FZU - 2150 bfs [kuangbin带你飞]专题一
题意:两个人玩很变态的游戏,将一个草坪的某两个点点燃,点燃的草坪可以向上下左右四个方向扩散,问能否将整块草坪上面的草都点燃.如果能,输出最短时间(^_^他们就能玩更变态的游戏了),如果不能,输出-1. ...
- HDU - 2612 bfs [kuangbin带你飞]专题一
分别以两个人的家作为起点,bfs求得到每个KFC最短距离.然后枚举每个KFC,求得时间之和的最小值即可. 此题不符合实际情况之处: 通过了一个KFC再去另一个KFC可以吗? 出题人都没好好想过吗? ...
- HDU - 1495 bfs [kuangbin带你飞]专题一
模拟倒水的过程,每次可以把第i个杯子的水向第j个杯子里面倒,这可能出现新的状态,不停的更新状态,指导某两个杯子的水等于S/2说明找到答案,如果所有状态搜索完毕仍然不能均分,则退出. 注意:如果S是奇数 ...
- POJ - 3087 模拟 [kuangbin带你飞]专题一
模拟洗牌的过程,合并两堆拍的方式:使先取s2,再取s1:分离成两堆的方式:下面C张放到s1,上面C张到s2.当前牌型与第一次相同时,说明不能搜索到答案. AC代码 #include<cstdio ...
随机推荐
- SQL Server——存储过程
我想从下面几个方面大概的讲述下存储过程,可能有些知识点是你没有注意的,也可能有些知识点我不知道,欢迎大家指点指点.如有不足,欢迎指教! 存储过程概念 存储过程优点 存储过程的接口 存储过程的解析.编译 ...
- 小白的Python之路 day5 re正则模块
re正则模块 一.概述 就其本质而言,正则表达式(或 RE)是一种小型的.高度专业化的编程语言,要讲他的具体用法要讲一本书!它内嵌在Python中,并通过 re 模块实现.你可以为想要匹配的相应字符串 ...
- angular4在prod模式下的JIT编译问题
最近利用angular4开发一个项目,由于画面中的显示都是从数据表中读取,通过设置显示FLAG和显示顺序对画面布局按既定规则控制的, 所以必须利用动态编译实现. 方法如下, 1,获取JitCompil ...
- Jetson TX2安装tensorflow(原创)
Jetson TX2安装tensorflow 大致分为两步: 一.划分虚拟内存 原因:Jetson TX2自带8G内存这个内存空间在安装tensorflow编译过程中会出现内存溢出引发的安装进程奔溃 ...
- MySQL--当查询遇到隐藏字符
事件起因: 在将一些EXCEL维护的数据导入MySQL中维护过程中发现漏了一些数据,检查时发现看着相同的SQL返回的结果完全不同: 在SQLyog中看到的截图如: 两个SQL执行返回结果不同,其中一条 ...
- flask----flask-session
一.flask-session flask-session是flask框架的session组件,由于原来flask内置session使用签名cookie保存,该组件则将支持session保存到多个地方 ...
- Go语言入门——dep入门
本文出现了大量maven的内容,更适合java程序员阅读,如果你的语言做依赖管理的方案与maven差异很大,可能在有些地方会不理解 从很久之前go语言在依赖解决和管理方面方案的匮乏就被不少人诟病.光指 ...
- IDEA Tomcat:Failed to initialize end point associated with ProtocolHandler
发现Tomcat的日志中出现这样的错误,一般都是端口被占用了.在任务管理器中检查是否有其他的应用在使用该端口 Failed to initialize end point associated wit ...
- Zookeeper启动时报8080端口被占用
zookeeper启动时报8080 端口被占用,导致启动失败.特别是服务器上部署了tomcat服务时需要注意. 通过查看zookeeper的官方文档,发现有3种解决途径: (1)删除jetty. (2 ...
- BZOJ 4513: [Sdoi2016]储能表 [数位DP !]
4513: [Sdoi2016]储能表 题意:求\[ \sum_{i=0}^{n-1}\sum_{j=0}^{m-1} max((i\oplus j)-k,0) \] 写出来好开心啊...虽然思路不完 ...