HDU 1495 非常可乐
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 非常可乐的更多相关文章
- BFS(倒水问题) HDU 1495 非常可乐
题目传送门 /* BFS:倒水问题,当C是奇数时无解.一共有六种情况,只要条件符合就入队,我在当该状态vised时写了continue 结果找了半天才发现bug,泪流满面....(网上找份好看的题解都 ...
- HDU 1495 非常可乐(数论,BFS)
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- HDU 1495 非常可乐 BFS 搜索
http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目就不说了, 说说思路! 倒可乐 无非有6种情况: 1. S 向 M 倒 2. S 向 N 倒 3. N ...
- HDU 1495 非常可乐 bfs 难度:1
http://acm.hdu.edu.cn/showproblem.php?pid=1495 第三个杯子的盛水量可由前两个杯子得到,而前两个杯子状态总数在100*100以内,穷举可实现 #includ ...
- HDU 1495 非常可乐(BFS倒水问题)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1495 题目大意:只有两个杯子,它们的容量分别是N 毫升和M 毫升 可乐的体积为S (S<101) ...
- HDU - 1495 非常可乐 【BFS】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1495 思路 首先 如果可乐的体积 是奇数 那么是无解的 然后 如果能够得到两杯 都是一般容量的可乐 那 ...
- HDU 1495 非常可乐 (只是转了个弯的广搜题)
N - 非常可乐 =========================================================================================== ...
- HDU 1495 非常可乐【BFS/倒水问题】
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissi ...
- HDU - 1495 非常可乐 bfs互倒三杯水
非常可乐 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submis ...
随机推荐
- MyEclipse for linux 破解方法
1.安装MyEclipse: uu@pc:~/desktop$ chmod +x myeclipse-pro-2014-GA-offline-installer-linux.run uu@pc:~/d ...
- 为什么要使用class.forname在DriverManager.getConnection之前
JDBC在getConnection之前为什么要调用Class.forName 获取一个数据库连接的通用模板如下: String driver = "oracle.jdbc.OracleDr ...
- TFS2012 安装 配置笔记
TFS2012安装 具体请看文档.. http://yunpan.cn/cmt4X6S7TjEgq 访问密码 464e TFS2012配置 环境:VS2012 SQL2008 T ...
- Java并发编程核心方法与框架-Executors的使用
合理利用线程池能够带来三个好处 降低资源消耗.通过重复利用已创建的线程降低线程创建和销毁造成的消耗. 提高响应速度.当任务到达时,任务可以不需要等到线程创建就能立即执行. 提高线程的可管理性.线程是稀 ...
- .NET Framework源码查看及下载
一.资源 1.http://referencesource.microsoft.com/ 二.备注 1.可在线预览.Net Framework 4.6.1源码实现
- 怎样让Oracle支持中文? 语言_地域.字符集
暂时不涉及数据库业务,但是今天入库的时候中文入库报错,考虑可能是字体不支持,留待备用. 来源:Linux社区 作者:robertkun 语言_地域.字符集SIMPLIFIED CHINESE_CHI ...
- Java Programming Test Question 1
public class JPTQuestion1 { public static void main(String[] args) { String s1 = "abc"; St ...
- GOF业务场景的设计模式-----观察者模式
定义:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新. 在软件系统中经常会有这样的需求:如果一个对象的状态发生改变,某些与它相关的对象也要随之做出 ...
- 清北学堂模拟day4 传球接力
[问题描述]n 个小朋友在玩传球. 小朋友们用 1 到 n 的正整数编号. 每个小朋友有一个固定的传球对象,第 i 个小朋友在接到球后会将球传给第 ai个小朋友, 并且第 i 个小朋友与第 ai个小朋 ...
- Java多线程初学者指南(7):向线程传递数据的三种方法
在传统的同步开发模式下,当我们调用一个函数时,通过这个函数的参数将数据传入,并通过这个函数的返回值来返回最终的计算结果.但在多线程的异步开发模式下,数据的传递和返回和同步开发模式有很大的区别.由于线程 ...