题目链接: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[][]; ///str[i]存有解时,step=i时的操作
}; int A,B,C; ///A,B表示两个杯子的容量,C目标容量
bool mark[][]; ///mark[i][j]表示在两个杯子在i,j的情况是否标记 bool bfs()
{
memset(mark,false,sizeof(mark)); queue<Node>que;
Node p,tmp; p.a=,p.b=,p.step=;
que.push(p);
mark[][]=true; while(!que.empty())
{
p=que.front();
que.pop(); ///搜索到解
if(p.a==C||p.b==C)
{
printf("%d\n",p.step);
for(int i=; i<=p.step; i++)
printf("%s\n",p.str[i]);
return true;
} if(p.a==)
{
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=;///倒掉
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=;
}
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==)
{
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=; ///倒掉
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=;
}
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 ;
}

广搜最短路径变形,(POJ3414)的更多相关文章

  1. poj3984迷宫问题 广搜+最短路径+模拟队列

    转自:http://blog.csdn.net/no_retreats/article/details/8146585   定义一个二维数组: int maze[5][5] = { 0, 1, 0, ...

  2. 广搜,深搜,单源最短路径,POJ(1130),ZOJ(1085)

    题目链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=85 http://poj.org/problem?id=1130 这 ...

  3. poj 3984:迷宫问题(广搜,入门题)

    迷宫问题 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7635   Accepted: 4474 Description ...

  4. hdu 1242:Rescue(BFS广搜 + 优先队列)

    Rescue Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submis ...

  5. poj 3026 Borg Maze 最小生成树 + 广搜

    点击打开链接 Borg Maze Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7097   Accepted: 2389 ...

  6. nyoj 523 双向广搜

    题目链接: http://acm.nyist.net/JudgeOnline/problem.php?pid=523 #include<iostream> #include<cstd ...

  7. 解救小哈——bfs广搜

    问题描述: 小哈去玩迷宫,结果迷路了,小哼去救小哈.迷宫由n行m列的单元格组成(n和m都小于等于50),每个单元格要么是空地,要么是障碍物. 问题:帮小哼找到一条从迷宫的起点通往小哈所在位置的最短路径 ...

  8. hdu 1253 胜利大逃亡 (广搜)

    题目链接 Problem Description Ignatius被魔王抓走了,有一天魔王出差去了,这可是Ignatius逃亡的好机会. 魔王住在一个城堡里,城堡是一个ABC的立方体,可以被表示成A个 ...

  9. 69.广搜练习:  最少转弯问题(TURN)

    [问题描述] 给出一张地图,这张地图被分为n×m(n,m<=100)个方块,任何一个方块不是平地就是高山.平地可以通过,高山则不能.现在你处在地图的(x1,y1)这块平地,问:你至少需要拐几个弯 ...

随机推荐

  1. Java-IO中的节点流和处理流

    理解好Java-IO中的节点流和处理流是理解Java输入.输出的关键基础,因此,了解节点流和处理流相关的知识点尤为重要. 1.定义 (1)节点流:可以从或向一个特定的地方(节点)读写数据.如FileR ...

  2. hadoop的一些命令技巧

    hadoop fs -cat <hdfspath> hadoop fs -cat <hdfspath>|more #more参数可是分页显示文件内容 echo abcd | h ...

  3. python自学-day2(变量、if条件判断、运算符操作)

    1.变量 变量只是用于保存内存位置,将变量存储在内存中的作用,方便后面调用,这意味着,在创建变量时会在内存中开辟一个空间. 变量命名规则: 由字母.数字.下划线(_)组成 不能以数字开头 不能使用 P ...

  4. 3d Max 2014安装失败怎样卸载3dsmax?错误提示某些产品无法安装

    AUTODESK系列软件着实令人头疼,安装失败之后不能完全卸载!!!(比如maya,cad,3dsmax等).有时手动删除注册表重装之后还是会出现各种问题,每个版本的C++Runtime和.NET f ...

  5. Murano Weekly Meeting 2015.10.13

    Meeting time: 2015.October.13th 1:00~2:00 Chairperson:  Serg Melikyan, PTL from Mirantis Meeting sum ...

  6. (转)centOS wget的使用

    摘要:CentOS wget是一个从网络上自动下载文件的自由工具.它支持HTTP,HTTPS和FTP协议,可以使用HTTP代理. 所谓的自动下载是指,CentOS wget可以在用户退出系统的之后在后 ...

  7. MahApps.Metro控件更換微軟視窗主題

    先來看一下微軟默認的視窗主題(左:Window)與MahApps.Metro的視窗主題(右:MetroWindow), Window   MetroWindow   MetroWindow似乎美觀多了 ...

  8. pat1093. Count PAT's (25)

    1093. Count PAT's (25) 时间限制 120 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CAO, Peng The strin ...

  9. MVC4笔记 @functions @model @using

    /////@functions自定义函数////// @helper辅助方法的确可以很方便的完成辅助方法开发,不过却失去了一些弹性,例如,无法在@helper中自定义属性,只能单纯的传入参数,然后格式 ...

  10. 微信小程序全选多选效果

    效果图: 代码: wxml <view class='hei_top'> <view class='hei_p'>共 <text>4</text> 场& ...