N - 非常可乐

================================================================================================================================
     不用想的太复杂,其实就是一道广搜题,
     三个瓶子有六种操作
     s瓶→n瓶  s瓶→m瓶    
     n瓶→m瓶  n瓶→s瓶  
     m瓶→n瓶  m瓶→s瓶
     只是比迷宫题的 上下左右 4个操作多了2种操作
     然后判定条件变成   两个瓶子里的液体相同&&另一个瓶子里为空 
     再按照一般广搜的套路来,定义好列表,head ,tail 开始进行广搜
     tail[head] 的初始状态 即三个瓶子的初始状态
     s瓶 满的 n瓶 空的 m瓶 空的  step = 0
================================================================================================================================
     代码:
 #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 非常可乐 (只是转了个弯的广搜题)的更多相关文章

  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 非常可乐

    http://acm.hust.edu.cn/vjudge/contest/view.action?cid=103711#problem/M /*BFS简单题 链接地址: http://acm.hdu ...

  4. HDU 1495 非常可乐 BFS 搜索

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

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

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

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

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

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

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

  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. 【量产工具修复】U盘插上没反应,格式化提示有写保护

    最近在实验室发现师兄留下的U盘,插上电脑后打不开,弹出格式化界面,格式化的时候又提示该u盘“被写保护无法格式化”,于是打算采用量产的方法. 第一步:使用chipgenius监测u盘的芯片制造商和型号 ...

  2. 一键生成http服务器

    如果你想用最简单的方法在内网共享目录,可以考虑为要共享的目录生成一个http服务器,这样就可以在内网任一台设备打开浏览器就可以浏览了.简单举几个例,有了这个http服务器就可以: 在手机浏览器里观看电 ...

  3. apache-实战(一)

     Apache 1.html的完整格式 # vim /var/www/html/index.html<html><head><title>我要</title& ...

  4. March 16 2017 Week 11 Thursday

    Adventure may hurt you, but monotony will kill you. 也许冒险会让你受伤,但一成不变会让你灭亡. The very theme of the univ ...

  5. python接口测试-项目实践(六) 实际结果与预期结果对比之 数据源与数据库对比

    六 与数据库对比 import pymssql def compare_expected_vs_db(): diff_list = [] # 存储不一致的代码 with pymssql.connect ...

  6. typescript import需要注意的地方以及一点疑问

    在使用 import {XXX} from './xxx'的时候,到浏览器上会报错,提示找不到xxx文件,原因在于没有加入后缀,这时候要写成import {XXX} from './xxx.js'注意 ...

  7. [USACO09FEB] Revamping Trails 【分层图+Dijkstra】

    任意门:https://www.luogu.org/problemnew/show/P2939 Revamping Trails 题目描述 Farmer John dutifully checks o ...

  8. Android学习笔记_10_ContentProvider内容提供者的使用

    一.使用ContentProvider共享数据 当应用继承ContentProvider类,并重写该类用于提供数据和存储数据的方法,就可以向其他应用共享其数据.以前我们学习过文件的操作模式,通过指定文 ...

  9. 22.访问jar包下资源路径里的文件

    访问jar包下资源路径里的文件 因为打包路径和你构建的代码路径是有差异的,想要查看真实的路径情况,可以查看编译后的classes目录下的文件结构. 想要获取资源文件流: private InputSt ...

  10. sql*plus

    [sql*plus创建txt文档编辑sql语句] (1)创建一个txt,命名doc SQL> ed  doc;          /*ed   文件名*/ (2)在doc.txt文件编辑sql语 ...