题目链接

http://poj.org/problem?id=3414

题意

给出两个杯子 容量分别为 A B 然后给出C 是目标容量

有三种操作

1 将一个杯子装满

2.将一个杯子全都倒掉

3.将一个杯子的水倒到另一个杯子里面

如果某个杯子里面的水 能够达到 目标容量 那么就输出步骤

思路

BFS 并且要存储步骤

每一步一共有六步操作 记得标记

AC代码

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <ctype.h>
  4. #include <cstdlib>
  5. #include <cmath>
  6. #include <climits>
  7. #include <ctime>
  8. #include <iostream>
  9. #include <algorithm>
  10. #include <deque>
  11. #include <vector>
  12. #include <queue>
  13. #include <string>
  14. #include <map>
  15. #include <stack>
  16. #include <set>
  17. #include <numeric>
  18. #include <sstream>
  19. #include <iomanip>
  20. #include <limits>
  21. #define CLR(a) memset(a, 0, sizeof(a))
  22. #define pb push_back
  23. using namespace std;
  24. typedef long long ll;
  25. typedef long double ld;
  26. typedef unsigned long long ull;
  27. typedef pair <int, int> pii;
  28. typedef pair <ll, ll> pll;
  29. typedef pair<string, int> psi;
  30. typedef pair<string, string> pss;
  31. const double PI = acos(-1.0);
  32. const double E = exp(1.0);
  33. const double eps = 1e-8;
  34. const int INF = 0x3f3f3f3f;
  35. const int maxn = 1e2 + 5;
  36. const int MOD = 1e9 + 7;
  37. /*
  38. 0 FILL 1
  39. 1 FILL 2
  40. 2 DROP 1
  41. 3 DROP 2
  42. 4 POUR 1 2
  43. 5 POUR 2 1
  44. */
  45. int visit[maxn][maxn];
  46. vector <int> ans;
  47. int flag;
  48. int a, b, c;
  49. struct node
  50. {
  51. int a, b;
  52. vector <int> v;
  53. };
  54. void bfs()
  55. {
  56. queue <node> q;
  57. node tmp;
  58. tmp.a = 0;
  59. tmp.b = 0;
  60. tmp.v.clear();
  61. q.push(tmp);
  62. visit[0][0] = 1;
  63. while (!q.empty())
  64. {
  65. node u = q.front(), v;
  66. q.pop();
  67. if (u.a == c || u.b == c)
  68. {
  69. flag = 1;
  70. ans = u.v;
  71. return;
  72. }
  73. if (u.a < a)
  74. {
  75. v.a = a;
  76. v.b = u.b;
  77. if (visit[v.a][v.b] == 0)
  78. {
  79. v.v = u.v;
  80. v.v.pb(0);
  81. q.push(v);
  82. visit[v.a][v.b] = 1;
  83. }
  84. }
  85. if (u.b < b)
  86. {
  87. v.a = u.a;
  88. v.b = b;
  89. if (visit[v.a][v.b] == 0)
  90. {
  91. v.v = u.v;
  92. v.v.pb(1);
  93. q.push(v);
  94. visit[v.a][v.b] = 1;
  95. }
  96. }
  97. if (u.a > 0)
  98. {
  99. v.a = 0;
  100. v.b = u.b;
  101. if (visit[v.a][v.b] == 0)
  102. {
  103. v.v = u.v;
  104. v.v.pb(2);
  105. q.push(v);
  106. visit[v.a][v.b] = 1;
  107. }
  108. }
  109. if (u.b > 0)
  110. {
  111. v.a = u.a;
  112. v.b = 0;
  113. if (visit[v.a][v.b] == 0)
  114. {
  115. v.v = u.v;
  116. v.v.pb(3);
  117. q.push(v);
  118. visit[v.a][v.b] = 1;
  119. }
  120. }
  121. if (u.a < a)
  122. {
  123. int c = a - u.a;
  124. if (u.b >= c)
  125. {
  126. v.b = u.b - c;
  127. v.a = a;
  128. }
  129. else
  130. {
  131. v.b = 0;
  132. v.a = u.a + u.b;
  133. }
  134. if (visit[v.a][v.b] == 0)
  135. {
  136. v.v = u.v;
  137. v.v.pb(5);
  138. q.push(v);
  139. visit[v.a][v.b] = 1;
  140. }
  141. }
  142. if (u.b < b)
  143. {
  144. int c = b - u.b;
  145. if (u.a >= c)
  146. {
  147. v.a = u.a - c;
  148. v.b = b;
  149. }
  150. else
  151. {
  152. v.a = 0;
  153. v.b = u.a + u.b;
  154. }
  155. if (visit[v.a][v.b] == 0)
  156. {
  157. v.v = u.v;
  158. v.v.pb(4);
  159. q.push(v);
  160. visit[v.a][v.b] = 1;
  161. }
  162. }
  163. }
  164. }
  165. int main()
  166. {
  167. map <int, string> M;
  168. M[0] = "FILL(1)";
  169. M[1] = "FILL(2)";
  170. M[2] = "DROP(1)";
  171. M[3] = "DROP(2)";
  172. M[4] = "POUR(1,2)";
  173. M[5] = "POUR(2,1)";
  174. CLR(visit, 0);
  175. scanf("%d%d%d", &a, &b, &c);
  176. flag = 0;
  177. bfs();
  178. if (flag == 0)
  179. printf("impossible\n");
  180. else
  181. {
  182. int len = ans.size();
  183. cout << len << endl;
  184. for (int i = 0; i < len; i++)
  185. cout << M[ans[i]] << endl;
  186. }
  187. }

POJ - 3414 Pots 【BFS】的更多相关文章

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

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

  2. POJ 3414 Pots【bfs模拟倒水问题】

    链接: http://poj.org/problem?id=3414 http://acm.hust.edu.cn/vjudge/contest/view.action?cid=22009#probl ...

  3. poj 3414 Pots【bfs+回溯路径 正向输出】

    题目地址:http://poj.org/problem?id=3414 Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions ...

  4. poj 3414 Pots ( bfs )

    题目:http://poj.org/problem?id=3414 题意:给出了两个瓶子的容量A,B, 以及一个目标水量C, 对A.B可以有如下操作: FILL(i)        fill the ...

  5. POJ 3414 Pots 暴力,bfs 难度:1

    http://poj.org/problem?id=3414 记录瓶子状态,广度优先搜索即可 #include <cstdio> #include <cstring> #inc ...

  6. poj 3414 Pots (bfs+线索)

    Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 10071   Accepted: 4237   Special J ...

  7. (简单) POJ 3414 Pots,BFS+记录路径。

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

  8. POJ 3414 Pots(BFS+回溯)

    Pots Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11705   Accepted: 4956   Special J ...

  9. 【BFS】POJ 3414

    直达 -> POJ 3414 Pots 相似题联动–>HDU 1495 非常可乐 题意:两个壶倒水,三种操作,两个桶其中一个满足等于C的最少操作,输出路径.注意a,b互倒的时候能不能倒满, ...

随机推荐

  1. 【Excle数据透视表】如何为数据透视表应用样式

    如下数据透视表样例,如何为该数据透视表设置样式呢? 步骤 单击数据透视表区域的任意单元格→数据透视表工具→设计→数据透视表样式→打开下拉箭头即可任意选择

  2. zxing学习笔记 android入门

    对于刚开始学习android开发的童鞋们来说,若有一个简单而又全面的android工程能来剖析,那就是再好不过了,zxing就是不错得例子.    zxing的源码可以到google code上下载, ...

  3. Ansible 安装jdk

    1. 在hosts文件添一个group,里面是你需要安装jdk的ip,如: [newhosts]192.168.2.155 ansible_ssh_user=hadoop ansible_ssh_pa ...

  4. C++中没有定义类的引用。

    在有时候由于类太大.须要在类在后面定义: 比如: class Y{ void f(X); }; class X{ //一些成员数据和函数 }; //error 由于c++要求不论什么一个变量在引用之前 ...

  5. org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframework.jdbc.BadSqlGrammarException: Unknown column 'viewpoint' in 'field list'

    问题描述:当我在model中添加了一下代码以后数据库报错: 添加的代码为: private Viewpoint viewpoint; public Viewpoint getViewpoint() { ...

  6. CentOS VSCode调试go语言出现:exec: "gcc": executable file not found in PATH

    CentOS VSCode调试go语言出现:exec: "gcc": executable file not found in PATH 解决方案: 执行如下命令安装GCC,然后重 ...

  7. 解决Mysql - can't get stat of (errcode:13)

    [1]线上环境问题 大清早来上班,被运维扔了一个错误日志截图,如下: Mysql 导入数据失败! [2]分析问题 记得如此类似的问题,好像已经都解决了.为啥又复现了呢?难道是自己上次没有考虑全场景?或 ...

  8. AR9331出现connect-debounce failed,port 1 disabled解决方法备忘

    基于AR9331的路由器,自己画的pcb板子,居然出现这个错误,百度下,貌似有不少人遇见过这个错误,可是在改动板子前我的固件用的是没问题的.USB完美使用 改动过板子后出现这个问题! hub 1-0: ...

  9. 使用Eclipse自带的Maven插件创建Web项目时报错:

    问题描述: 使用Eclipse自带的Maven插件创建Web项目时报错: Could not resolve archetype org.apache.maven.archetypes:maven-a ...

  10. 九度OJ 1208:10进制 VS 2进制 (进制转换)

    时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:2040 解决:612 题目描述: 对于一个十进制数A,将A转换为二进制数,然后按位逆序排列,再转换为十进制数B,我们乘B为A的二进制逆序数. ...