http://acm.hust.edu.cn/vjudge/contest/view.action?cid=103711#problem/M

/*BFS简单题
链接地址: http://acm.hdu.edu.cn/showproblem.php?pid=1495
思路:预处理m < n < s,以后处理方便点
初始状态,m,n杯中可乐体积为0,s杯中体积为s;
然后分六种情况:
1, s 倒 m
2, s 倒 n
3, m 倒 n
4, m 倒 s
5, n 倒 m
6, n 倒 s
直到n,s杯中的可乐能等分(此时m杯中体积为0)为止,若不能等分,则输出 NO
*/
#include<iostream>
#include<algorithm>
#include<queue>
using namespace std;
#define maxn 101
bool visited[maxn][maxn];
int m,n,s,si,sj;
struct node
{
int x,y,all,t; //x,y,all分别表示m,n,s杯中可乐的体积,t表示倒了多少次
};
void BFS(){ queue<node> que;
memset(visited,false,sizeof(visited));
node p,q;
p.x = ,p.y = ,p.t = ,p.all = s;
que.push(p);
visited[p.x][p.y] = true; while(!que.empty()){
p = que.front();
que.pop();
if(p.y == p.all && p.y == s/)
{
printf("%d\n",p.t);
return;
} if(p.all+p.x > m) //s倒m
{
q.x = m,q.y = p.y,q.all = p.all+p.x-m,q.t = p.t+;
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true;
}
else
{
q.x = p.all+p.x,q.y = p.y,q.all = ,q.t = p.t+;
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true;
} if(p.all+p.y > n) //s倒n
{
q.x = p.x, q.y = n, q.all = p.all+p.y-n,q.t = p.t+;
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true;
}
else
{
q.x = p.x,q.y = p.all+p.y,q.all = ,q.t = p.t+;
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true;
} if(p.x+p.y > n) //m倒n
{
q.x = p.x+p.y-n,q.y = n,q.all = p.all,q.t = p.t+;
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true;
}
else
{
q.x = ,q.y = p.x+p.y,q.all = p.all,q.t = p.t+;
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true;
} q.all = p.all+p.x,q.x = ,q.y = p.y,q.t = p.t+; //m倒s
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true; if(p.x+p.y > m)
{
q.y = p.y+p.x-m,q.x = m,q.all = p.all,q.t = p.t+;//n倒m
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true;
}
else
{
q.x = p.x+p.y,q.y = ,q.all = p.all,q.t = p.t+;
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true;
} q.all = p.all+p.y,q.x = p.x,q.y = ,q.t = p.t+; //n倒s
if(!visited[q.x][q.y])
que.push(q),visited[q.x][q.y] = true;
}
printf("NO\n");
}
int main()
{
//freopen("1013.txt","r",stdin);
while(scanf("%d%d%d",&s,&m,&n) && (s||m||n))
{
if(s%)
{
printf("NO\n");
continue;
}
if(m > n) swap(m,n);
BFS();
}
return ;
}

HDU 1495 非常可乐的更多相关文章

  1. BFS(倒水问题) HDU 1495 非常可乐

    题目传送门 /* BFS:倒水问题,当C是奇数时无解.一共有六种情况,只要条件符合就入队,我在当该状态vised时写了continue 结果找了半天才发现bug,泪流满面....(网上找份好看的题解都 ...

  2. HDU 1495 非常可乐(数论,BFS)

    非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  3. HDU 1495 非常可乐 BFS 搜索

    http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目就不说了, 说说思路! 倒可乐 无非有6种情况: 1. S 向 M 倒 2. S 向 N 倒 3. N ...

  4. HDU 1495 非常可乐 bfs 难度:1

    http://acm.hdu.edu.cn/showproblem.php?pid=1495 第三个杯子的盛水量可由前两个杯子得到,而前两个杯子状态总数在100*100以内,穷举可实现 #includ ...

  5. HDU 1495 非常可乐(BFS倒水问题)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目大意:只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101) ...

  6. HDU - 1495 非常可乐 【BFS】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1495 思路 首先 如果可乐的体积 是奇数 那么是无解的 然后 如果能够得到两杯 都是一般容量的可乐 那 ...

  7. HDU 1495 非常可乐 (只是转了个弯的广搜题)

    N - 非常可乐 =========================================================================================== ...

  8. HDU 1495 非常可乐【BFS/倒水问题】

    非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...

  9. HDU - 1495 非常可乐 bfs互倒三杯水

    非常可乐 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

随机推荐

  1. Java——基本容器:JFrame

    创建一个新的窗体 import java.awt.Color; import javax.swing.JFrame; //======================================= ...

  2. 浏览器本地存储(browser-storage,HTML5-localStorage > IE-UserData > Cookie)

    https://www.baidufe.com/component/browser-storage/index.html BrowserStorage是浏览器本地存储的一个解决方案,存储优先级依次为: ...

  3. 安装weinre在PC端调试移动端

    1.使用node安装weinre. 2.启动weinre, weinre --httpPort 8081  --boundHost -all- 3.在浏览器打开 http://localhost:80 ...

  4. Js获取指定Url参数

    在 C#.PHP.JSP 中,都有直接获取 Url 中指定参数的方法,但 Javascript 却没有这样的现在方法,得自己写一个.在 Web 的开发过程中,获取 Url 中的参数是十分常用的操作,所 ...

  5. php构造函数extends

    extends的继续关系 page继承Dapta:也就是page拥有data的所有功能. <?php class Data{ function f(){ "; } } class Pa ...

  6. Python之闭包

    Python之闭包 我们知道,在装饰器中,可以在函数体内创建另外一个函数,例如: def makebold(fn): def wrapped(): return "<b>&quo ...

  7. struts2基础篇(1)

    一.Struts2简介Struts2以WebWork优秀的设计思想为核心,吸收了Struts1的部分优点,建立了一个基于WebWork和Struts1的MVC框架. 二.搭建Struts2开发环境2. ...

  8. java获取指定路径下的指定文件/java.io.File.listFiles(FilenameFilter filter)

    java.io.File.listFiles(FilenameFilter filter) 返回抽象路径名数组,表示在目录中此抽象路径名表示,满足指定过滤器的文件和目录. 声明 以下是java.io. ...

  9. Oracle nvl(),nvl2()函数介绍

    NVL函数 Oracle/PLSQL中的一个函数. 格式为: NVL( string1, replace_with) 功能:如果string1为NULL,则NVL函数返回replace_with的值, ...

  10. c#之Redis队列在邮件提醒中的应用

    场景 有这样一个场景,一个邮件提醒的windows服务,获取所有开启邮件提醒的用户,循环获取这些用户的邮件,发送一条服务号消息.但问题来了,用户比较少的情况下,轮询一遍时间还能忍受,如果用户多了,那用 ...