HDU 1495 非常可乐 (只是转了个弯的广搜题)
N - 非常可乐
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int s,n,m;
struct Node{
int s,n,m;
int step;
void in(int a,int b,int c,int d)
{
s=a,n=b,m=c;step=d;
}
}tail[];
bool book[][];
bool flag;
int head,top;
void caozuo(int i,int& ts,int& tn,int& tm)
{
if(i==) // s瓶→n瓶
{
tn+=ts;ts=; //s瓶全部倒入 n瓶
//tn表示当前的液体 , n表示最多可容纳多少
if(tn>n) ts = tn-n,tn=n; //如果n瓶溢出了,则溢出的返回给s瓶
}
//下面的操作原理跟上面一样
if(i==) // s瓶→m瓶
{
tm+=ts;ts=;
if(tm>m) ts = tm-m,tm=m;
}
if(i==) // n瓶→s瓶
{
ts+=tn;tn=;
if(ts>s) tn = ts-s,ts=s;
}
if(i==) // n瓶→m瓶
{
tm+=tn;tn=;
if(tm>m) tn = tm-m,tm=m;
}
if(i==) // m瓶→s瓶
{
ts+=tm;tm=;
if(ts>s) tm = ts-s,ts=s;
}
if(i==) // m瓶→n瓶
{
tn+=tm;tm=;
if(tn>n) tm = tn-n,tn=n;
}
}
int main()
{
while(~scanf("%d %d %d",&s,&n,&m)&&s+n+m)
{
flag=;memset(book,,sizeof(book)); //初始化
if(n == m) printf("1\n"); //如果n==m,只需一步就可以达到目的
else
{
head = ;top = ;
tail[].in(s,,,); //队列【1】初始化
book[][]=;
while(head<top)
{
for(int i = ;i<=;++i)
{
int ts = tail[head].s;
int tn = tail[head].n;
int tm = tail[head].m;
caozuo(i,ts,tn,tm); //执行六个步骤
if(book[tn][tm]==) continue;
if(book[tn][tm]==)
{
book[tn][tm]=;
tail[top].in(ts,tn,tm,tail[head].step+);
++top;
}
//printf("ts : %d tn: %d tm: %d %d\n",ts,tn,tm,tail[top-1].step);
//↑可以直观的看到每一步三个瓶子的状况
if(tn==tm&&ts==||tn==ts&&tm==||ts==tm&&tn==) {flag=;break;}
}
head++;
if((flag==)) break;
}
if(flag) printf("%d\n",tail[top-].step);
else printf("NO\n"); }
}
}
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 非常可乐
http://acm.hust.edu.cn/vjudge/contest/view.action?cid=103711#problem/M /*BFS简单题 链接地址: http://acm.hdu ...
- 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 非常可乐【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 ...
随机推荐
- Angular项目新建
Angular新建项目步骤记录 标签(空格分隔): Angular 1. ng new my-app 2. 启动dev环境 cd my-app ng serve --open 3. 修改styles. ...
- 使用pm2自动化部署node项目
1.pm2简介 pm2(process manager)是一个进程管理工具,维护一个进程列表,可以用它来管理你的node进程,负责所有正在运行的进程,并查看node进程的状态,也支持性能监控,负载均衡 ...
- 什么是SWP文件?能否删除swp文件?
SWP意思就是交换文件..SWP是各种操作系统(Windows或Linux)使用的交换文件的文件扩展名. 可以安全地清理SWP文件以释放磁盘空间. 要清理SWP文件,请按照以下步骤操作: 运行WinU ...
- 一点一点学写Makefile-1
相信很多Linux开发者 都得自己来写Makefile,刚开始学习学写这个的时候都会碰到很多困难,我之前没有自己独立完成过Makefile,都是在公司已有的模板上添加.现在突然有一个很大的想法就是从零 ...
- Kubernetes里的secret最基本的用法
Secret解决了密码.token.密钥等敏感数据的配置问题,使用Secret可以避免把这些敏感数据以明文的形式暴露到镜像或者Pod Spec中. Secret可以以Volume或者环境变量的方式使用 ...
- nutz 结合QueryResult,Record 自定义分页查询,不构建pojo 整合
public QueryResult getHistoryIncome(int d, int curPage) throws Exception { /**sql**/ Sql sql = Sqls. ...
- SpringBoot使用PageHelper进行分页
因为SpringBoot就是为了实现没有配置文件,因此之前手动在Mybatis中配置的PageHelper现在需要重新配置,而且配置方式与之前的SSM框架中还是有点点区别. 首先需要在pom文件 ...
- javaw.exe 和java.exe的区别
1.java启动的程序是命令行程序或阻塞程序,如果该程序未执行完毕或未被关闭,则所打开的命令行将被阻塞,不能执行其它命令如dir等,可以通过Ctrl+C等方式关闭程序:2.javaw启动的程序是窗口程 ...
- POJ 1830 开关问题 【01矩阵 高斯消元】
任意门:http://poj.org/problem?id=1830 开关问题 Time Limit: 1000MS Memory Limit: 30000K Total Submissions: 1 ...
- ubuntu应用商店打不开怎么办
依次运行下面的命令: 桥接网络设置好 sudo apt-get update sudo apt-get dist-upgrade sudo apt-get install --reinstall so ...