题目地址:http://poj.org/problem?id=1606

广度优先搜索的经典问题,倒水问题。算法不需要多说,直接BFS,路径输出采用递归。最后注意是Special Judge

  1. #include<cstdio>
  2. #include<iostream>
  3. #include<algorithm>
  4. #include<cstring>
  5. #include<queue>
  6. using namespace std;
  7. const int K=;
  8. queue<int> Q;
  9. int c[K][K],ca,cb,N,ax,bx;
  10. char map[][]={
  11. {"fill A"},
  12. {"fill B"},
  13. {"empty A"},
  14. {"empty B"},
  15. {"pour A B"},
  16. {"pour B A"}
  17. };
  18. struct node {
  19. int x,y,step;
  20. } d[K][K];
  21.  
  22. void init()
  23. {
  24. memset(c,,sizeof(c));
  25. memset(d,,sizeof(d));
  26. }
  27. void print(int xa,int xb)
  28. {
  29. if(xa== && xb==) return ;
  30. print(d[xa][xb].x,d[xa][xb].y);
  31. printf("%s\n",map[d[xa][xb].step]);
  32. }
  33. void bfs(int cax,int cbx,int N)
  34. {
  35. while(!Q.empty()) Q.pop();
  36. c[][]=;
  37. Q.push(cax);Q.push(cbx);
  38.  
  39. while(!Q.empty()) {
  40. int xa=Q.front(); Q.pop();
  41. int xb=Q.front(); Q.pop();
  42.  
  43. if(xb==N ) {
  44. print(xa,xb);
  45. printf("success\n");
  46. break;
  47. }
  48. if(!c[ca][xb]){
  49. c[ca][xb]=;
  50.  
  51. d[ca][xb].x=xa;
  52. d[ca][xb].y=xb;
  53. d[ca][xb].step=;
  54.  
  55. Q.push(ca);
  56. Q.push(xb);
  57. }
  58. if(!c[xa][cb]){
  59. c[xa][cb]=;
  60.  
  61. d[xa][cb].x=xa;
  62. d[xa][cb].y=xb;
  63. d[xa][cb].step=;
  64.  
  65. Q.push(xa);
  66. Q.push(cb);
  67. }
  68. if(!c[][xb]){
  69. c[][xb]=;
  70.  
  71. d[][xb].x=xa;
  72. d[][xb].y=xb;
  73. d[][xb].step=;
  74.  
  75. Q.push();
  76. Q.push(xb);
  77. }
  78. if(!c[xa][]){
  79. c[xa][]=;
  80.  
  81. d[xa][].x=xa;
  82. d[xa][].y=xb;
  83. d[xa][].step=;
  84.  
  85. Q.push(xa);
  86. Q.push();
  87. }
  88.  
  89. if(xa<=cb-xb){
  90. if(!c[][xb+xa]){
  91. c[][xb+xa]=;
  92.  
  93. d[][xb+xa].x=xa;
  94. d[][xb+xa].y=xb;
  95. d[][xb+xa].step=;
  96.  
  97. Q.push();
  98. Q.push(xb+xa);
  99. }
  100. } else {
  101. if(xa-(cb-xb)>= && !c[xa-(cb-xb)][cb]){
  102. c[xa-(cb-xb)][cb]=;
  103.  
  104. d[xa-(cb-xb)][cb].x=xa;
  105. d[xa-(cb-xb)][cb].y=xb;
  106. d[xa-(cb-xb)][cb].step=;
  107.  
  108. Q.push(ca-(cb-xb));
  109. Q.push(cb);
  110. }
  111. }
  112.  
  113. if(xb<=ca-xa){
  114. if(!c[xa+xb][]){
  115. c[xa+xb][]=;
  116.  
  117. d[xa+xb][].x=xa;
  118. d[xa+xb][].y=xb;
  119. d[xa+xb][].step=;
  120.  
  121. Q.push(xa+xb);
  122. Q.push();
  123. }
  124. } else {
  125. if(xb-(ca-xa)>= && !c[ca][xb-(ca-xa)]){
  126. c[ca][xb-(ca-xa)]=;
  127.  
  128. d[ca][xb-(ca-xa)].x=xa;
  129. d[ca][xb-(ca-xa)].y=xb;
  130. d[ca][xb-(ca-xa)].step=;
  131.  
  132. Q.push(ca);
  133. Q.push(xb-(ca-xa));
  134. }
  135. }
  136. }
  137.  
  138. }
  139. int main()
  140. {
  141.  
  142. while(~scanf("%d%d%d",&ca,&cb,&N)){
  143. init();
  144. bfs(,,N);
  145.  
  146. }
  147.  
  148. return ;
  149. }

[POJ] 1606 Jugs(BFS+路径输出)的更多相关文章

  1. poj 3414 Pots(广搜BFS+路径输出)

    转载请注明出处:http://blog.csdn.net/u012860063?viewmode=contents 题目链接:id=3414">http://poj.org/probl ...

  2. POJ-3984.迷宫问题(BFS + 路径输出)

    昨天中午做的这道题,结果蛙了一整天,就因为一行代码困住了,今天算是见识到自己有多菜了.流泪.jpg 本题大意:给一个5 * 5的迷宫,1表示墙壁,0表示通路,从左上角走到右下角并输出路径. 本题思路: ...

  3. bfs + 路径输出

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

  4. POJ 1606 Jugs

    Jugs Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 4280   Accepted: 2533   Special Ju ...

  5. poj 2127 LCIS 带路径输出

    这个题   用一维 为什么错了: 因为 用一维 dp 方程肯定也是一维:但是有没有想,第 i 个字符更新了 j 位置的最优结果,然后 k 字符又一次更新了  j 位置的最优值,然后  我的结果是  i ...

  6. Pots(POJ - 3414)【BFS 寻找最短路+路径输出】

    Pots(POJ - 3414) 题目链接 算法 BFS 1.这道题问的是给你两个体积分别为A和B的容器,你对它们有三种操作,一种是装满其中一个瓶子,另一种是把其中一个瓶子的水都倒掉,还有一种就是把其 ...

  7. Poj3984 迷宫问题 (BFS + 路径还原)

    Description 定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, ...

  8. POJ-3894 迷宫问题 (BFS+路径还原)

    定义一个二维数组: int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 1, ...

  9. 洛谷 P2764 最小路径覆盖问题【最大流+拆点+路径输出】

    题目链接:https://www.luogu.org/problemnew/show/P2764 题目描述 «问题描述: 给定有向图G=(V,E).设P 是G 的一个简单路(顶点不相交)的集合.如果V ...

随机推荐

  1. LINQ to SQLite完美解决方案

    1.下载安装LinqConnectExpress(就是LinqConnect免费版) 2.安装好后就和LINQ TO  SQL 一样了! 3.查询(增删改查和LINQ TO SQL 完全一样,你可以不 ...

  2. Session之考勤

    昨天初步的调侃了一下cookie,希望看官能够有更轻松愉快的学习和进一步的思考应用. 小编今天突然听到人事怨声载道,原来已多日未进行打卡考勤,虽是弹性工作,也颇有不好意思,决定明日改过,进门刷卡.灵机 ...

  3. 我是企业号体验账户 我发送消息:微信错误 errcode=60011,

    http://qydev.weixin.qq.com/qa/index.php?qa=3197&qa_1=%E6%88%91%E6%98%AF%E4%BC%81%E4%B8%9A%E5%8F% ...

  4. [Java] 可运行 jar 记录

    在 Eclipse 上,通过 Export 选择 Java 下的 Runnable JAR file ,可以将项目导出一个可执行的 jar 包. 例子如下 1. Eclipse 项目只有一个文件 ma ...

  5. [转载]监控 Linux 性能的 18 个命令行工具

    转自:http://www.kuqin.com/shuoit/20140219/338066.html 对于系统和网络管理员来说每天监控和调试Linux系统的性能问题是一项繁重的工作.在IT领域作为一 ...

  6. JavaScript String 对象实例深入研究

    本文主要介绍并分析JavaScript中String对象的具体用法,以及和String对象相关的方法,方便开发者在JavaScript开发中更好地处理字符串. 1. 介绍 String 对象,对字符串 ...

  7. 解决NoSuchMethodError with Spring MutableValues异常问题

    今天下午项目启动时,遇到一个异常,导致无法启动: [ 221] ERROR - work.web.context.ContextLoader - Context initialization fail ...

  8. adb 获取手机值

     获取手机RAM值    adb shell cat /proc/meminfo   获取手机内存值     adb shell df /data

  9. C语言判断文件是否存在

      用函数access,头文件是io.h,原型:    int   access(const   char   *filename,   int   amode); amode参数为0时表示检查文件的 ...

  10. 4_Linux_文件压缩和解压指令

    3.4压缩解压命令.gz .tar.gz .zip .bz2 1)gzip 仅压缩文件 gzip命令用于压缩文件,英文原意为GNU zip,所在路径/bin/gzip,其语法格式为: gzip [文件 ...