题目链接:http://poj.org/problem?id=3414

解题报告:

1、每个节点都是一个独立的状态

2、这里的状态转移就是有几种出路,4种:1、倒掉a中的水,2、把a中的水倒到b中去,3、倒掉b 中的水,4、把b中的水倒到a中去

3、每次的步骤记录到str[][]中去

4、搜索最短路径

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>using namespace std;struct Node
{int a;        ///a杯子里面的水int b;        ///b杯子里面的水int step;    ///到a,b的情况下所用的步数char str[105][105];    ///str[i]存有解时,step=i时的操作
};int A,B,C;        ///A,B表示两个杯子的容量,C目标容量
bool mark[105][105];    ///mark[i][j]表示在两个杯子在i,j的情况是否标记bool bfs()
{memset(mark,false,sizeof(mark));queue<Node>que;Node p,tmp;p.a=0,p.b=0,p.step=0;que.push(p);mark[0][0]=true;while(!que.empty()){p=que.front();que.pop();///搜索到解if(p.a==C||p.b==C){printf("%d\n",p.step);for(int i=1; i<=p.step; i++)printf("%s\n",p.str[i]);return true;}if(p.a==0){tmp=p;tmp.a=A;///倒满tmp.step++;strcpy(tmp.str[tmp.step],"FILL(1)");if(!mark[tmp.a][tmp.b]){mark[tmp.a][tmp.b]=true;que.push(tmp);}}else if(p.a<=A)    ///可以选择倒掉,也可以选择倒到2杯子中去
        {tmp=p;tmp.a=0;///倒掉tmp.step++;strcpy(tmp.str[tmp.step],"DROP(1)");if(!mark[tmp.a][tmp.b]){mark[tmp.a][tmp.b]=true;que.push(tmp);}if(p.b<B){tmp=p;if(tmp.a+tmp.b<=B){tmp.b+=tmp.a;tmp.a=0;}else{tmp.a=(tmp.b+tmp.a)-B;tmp.b=B;}tmp.step++;strcpy(tmp.str[tmp.step],"POUR(1,2)");if(!mark[tmp.a][tmp.b]){mark[tmp.a][tmp.b]=true;que.push(tmp);}}}if(p.b==0){tmp=p;tmp.b=B;///倒满tmp.step++;strcpy(tmp.str[tmp.step],"FILL(2)");if(!mark[tmp.a][tmp.b]){mark[tmp.a][tmp.b]=true;que.push(tmp);}}else if(p.b<=B)    ///可以选择倒掉,也可以选择倒到1中
        {tmp=p;tmp.b=0;    ///倒掉tmp.step++;strcpy(tmp.str[tmp.step],"DROP(2)");if(!mark[tmp.a][tmp.b]){mark[tmp.a][tmp.b]=true;que.push(tmp);}if(p.a<A)    ///倒到1中
            {tmp=p;if(tmp.b+tmp.a<=A){tmp.a+=tmp.b;tmp.b=0;}else{tmp.b=(tmp.b+tmp.a)-A;tmp.a=A;}tmp.step++;strcpy(tmp.str[tmp.step],"POUR(2,1)");if(!mark[tmp.a][tmp.b]){mark[tmp.a][tmp.b]=true;que.push(tmp);}}}}return false;
}int main()
{while(scanf("%d%d%d",&A,&B,&C)!=EOF){if(!bfs()) puts("impossible");}return 0;
}

转载于:https://www.cnblogs.com/TreeDream/p/5373949.html

广搜最短路径变形,(POJ3414)相关推荐

  1. 【搜索-广搜】 迷宫的最短路径

    题目: 给定一个大小为N*M的迷宫,由通道('.')和墙壁('#')组成,其中通道S表示起点,通道G表示终点,每一步移动可以达到上下左右中不是墙壁的位置.试求出起点到终点的最小步数.(本题假定迷宫是有 ...

  2. [HDU] 1181 变形课-简单建模后广搜

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1181 方法:以所有咒语看做一条起点为首字母,终点为末字母的有向边来建立有向图.然后在图中判断目标路径 ...

  3. 算法之路——深搜、广搜(简单搜索)

    搜索 通过一定的顺序,枚举每一个数据(经常会通过一些判断条件去掉无意义的数据,即剪枝),找到想要的数据的过程. 深度优先搜索(dfs) 深度优先搜索属于图算法的一种,是一个针对图和树的算法,应为缩写为 ...

  4. [数据结构] 迷宫问题(栈和队列,深搜和广搜)

    代码: #include <iostream> #include <string.h> #include <stack> #include <queue> ...

  5. [HDU] 2612 Find a way - 用单源最短论经模拟的简单广搜

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=2612 方法:其实就是从两个点分别探寻单源最短路径,两个点到同一个目标位置的最短路径都求出来,相加,然 ...

  6. Poj_3984走迷宫(广搜)

    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,0, 0 ...

  7. 45行代码AC_2017年第八届蓝桥杯C/C++ A组第二题(广搜模板+解题报告)

    问题描述 有9只盘子,排成1个圆圈. 其中8只盘子内装着8只蚱蜢,有一个是空盘. 我们把这些蚱蜢顺时针编号为 1~8   每只蚱蜢都可以跳到相邻的空盘中, 也可以再用点力,越过一个相邻的蚱蜢跳到空盘中 ...

  8. poj3984 迷宫问题 bfs 最短路 广搜

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 27913   Accepted: 16091 Descriptio ...

  9. 深搜DFS\广搜BFS 图初步入门

    首先,不管是BFS还是DFS,由于时间和空间的局限性,它们只能解决数据量比较小的问题. 深搜,顾名思义,它从某个状态开始,不断的转移状态,直到无法转移,然后退回到上一步的状态,继续转移到其他状态,不断 ...

最新文章

  1. Python案例:使用正则表达式的爬虫
  2. Verilog初级教程(21)Verilog中的延迟控制语句
  3. 赛门铁克卸载工具_神奇的安卓恶意软件 xHelper:自卸载且无法删除
  4. [转]讲解安装Ubuntu nfs配置系统
  5. Java网络编程之IP地址和InetAddress类
  6. 关于海量数据的SQL查询优化.........
  7. php中重写和final关键字的使用
  8. 武汉大学计算机学院参考书目,2020武汉大学计算机与软件工程考研初试科目、参考书目及复试详情...
  9. Bootstrap 警告框插件Alert 的事件
  10. 软件测试bug文档模板,国家标准测试计划文档模板
  11. Webpack入门教程三十
  12. 【Excel】多元一次方程组求解计算器
  13. 泛运筹理论初探——HANP和BMLPA以及DCLP简介
  14. 最新版:移动设备管理与OMA DM协议 V6
  15. 留不下的城市,回不去的家乡,真得么?
  16. 将孤独视作挑战,倾听内心,自我对话
  17. Poj 2992 Divisors(算数基本定理素数因子个数)
  18. Linux Vi命令使用手册
  19. tmooccn达内登录_达内在线tmooc登陆
  20. 5G时代的物联网:福器还是凶器

热门文章

  1. java 导出excel学习小片段
  2. Oracle性能调优
  3. 用心摘种一树技能,植树节送3本书
  4. Python接口自动化之unittest单元测试
  5. Compound总法律顾问:PWG的稳定币声明不是积极提议,他们的任期没几天了
  6. SAP License:中国集团管控存在的主要问题-已加入点评
  7. SAP License:SE16如何删除或合修改数据库表
  8. 实操长文|评估风控策略效果(全)
  9. 欺诈与反欺诈的旷世攻防之战
  10. python六十七课——网络编程(基础知识了解)