HDU 1495 非常可乐(BFS)

思路

最难在于想到这道题是BFS,想到之后只有六种情况就很好理解了。

代码

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<queue>
using namespace std;
int a,b,s;
struct shui
{int count;int ha,hb,hs;
}t,t1;
int min(int x,int y)
{return x<y?x:y;
}
bool vis[1000][1000];
bool mark;
struct shui bfs(int ha,int hb,int hs,int count)
{queue<struct shui> q;t.hs=s;t.ha=0;t.hb=0;t.count=0;q.push(t);vis[t.ha][t.hb]=true;while(!q.empty()){t1=q.front();q.pop();if(t1.hs==t1.ha&&t1.ha==s/2&&t1.hb==0){mark=true;return t1;}if(t1.hs&&t1.ha!=a)//瓶子s倒到杯子a{t.count=t1.count+1;t.ha=t1.ha+min(a-t1.ha,t1.hs);//a-t1.ha是瓶子中最多能倒的,t1.hs是最多能倒的t.hs=t1.hs-min(a-t1.ha,t1.hs);t.hb=t1.hb;if(t.hs==t.ha&&t.ha==s/2&&t.hb==0){   //printf("z1 %d %d %d %d\n",t.ha,t.hb,t.hs,t.count);mark=true;return t;}if(!vis[t.ha][t.hb]){//printf("b1 %d %d %d %d\n",t.ha,t.hb,t.hs,t.count);vis[t.ha][t.hb]=true;q.push(t);}}if(t1.hs&&t1.hb!=b){t.count=t1.count+1;t.hb=t1.hb+min(b-t1.hb,t1.hs);t.hs=t1.hs-min(b-t1.hb,t1.hs);t.ha=t1.ha;if(t.hs==t.ha&&t.ha==s/2&&t.hb==0){   mark=true;return t;}if(!vis[t.ha][t.hb]){vis[t.ha][t.hb]=true;q.push(t);}}if(t1.ha&&t1.hs!=s)//a{t.count=t1.count+1;t.hs=t1.hs+min(s-t1.hs,t1.ha);t.ha=t1.ha-min(s-t1.hs,t1.ha);t.hb=t1.hb;if(t.hs==t.ha&&t.ha==s/2&&t.hb==0){mark=true;return t;}if(!vis[t.ha][t.hb]){   vis[t.ha][t.hb]=true;q.push(t);}}if(t1.ha&&t1.hb!=b){t.count=t1.count+1;t.hb=t1.hb+min(b-t1.hb,t1.ha);t.ha=t1.ha-min(b-t1.hb,t1.ha);t.hs=t1.hs;if(t.hs==t.ha&&t.ha==s/2&&t.hb==0){   mark=true;return t;}if(!vis[t.ha][t.hb]){   vis[t.ha][t.hb]=true;q.push(t);}}if(t1.hb&&t1.ha!=a){t.count=t1.count+1;t.ha=t1.ha+min(a-t1.ha,t1.hb);t.hb=t1.hb-min(a-t1.ha,t1.hb);t.hs=t1.hs;if(t.hs==t.ha&&t.ha==s/2&&t.hb==0){   mark=true;return t;}if(!vis[t.ha][t.hb]){   vis[t.ha][t.hb]=true;q.push(t);}}if(t1.hb&&t1.hs!=s){t.count=t1.count+1;t.hs=t1.hs+min(s-t1.hs,t1.hb);t.hb=t1.hb-min(s-t1.hs,t1.hb);t.ha=t1.ha;if(t.hs==t.ha&&t.ha==s/2&&t.hb==0){mark=true;return t;}if(!vis[t.ha][t.hb]){   vis[t.ha][t.hb]=true;q.push(t);}}}return t;
}
int main()
{struct shui p;while(~scanf("%d%d%d",&s,&a,&b)){if(a<b){int t;t=a;a=b;b=t;}memset(vis,false,sizeof(vis));mark=false;if(a==0&&b==0&&s==0)break;p=bfs(0,0,s,0);if(mark) printf("%d\n",p.count);elseprintf("NO\n");}return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/508625.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NBU计算机专业期末考试记录

考试科目&#xff1a;操作系统 软件工程 数据库 计算机网络 JAVA高级应用 汇编 计算机算法设计 操作系统&#xff1a;题目比较简单&#xff0c;这学期的大题有写读写互斥的代码、求平均磁道数、银行家算法、页面调度算法的缺页次数计算。期中考试有参考价值&#xff0c;要看懂…

蚁群算法的若干记录

1、蚁群算法的特点&#xff1a; ① 结合了分布式算法、正反馈机制、贪婪式搜索的算法&#xff1a;正反馈可以快速发现较优解、分布式算法避免早熟收敛、贪婪式搜索有助于早期找出可解决方案&#xff1b; ② 蚁群算法具有很强的并行性&#xff1b; ③ 个体之间通过信息素合作…

蚁群算法之二

1、蚂蚁系统模型的建立 给定G(V,A)&#xff0c;其中V为定点集&#xff0c;A为各顶点互相连接组成的边集,已知各顶点之间的连接距离&#xff0c;要求确定一条长度最短的回路&#xff0c;仅遍历一次所有顶点的回路。引入记号&#xff1a; m&#xff1a;蚁群中蚂蚁的数量&#x…

ns2相关学习——tcl脚本编写(1)

新建一个仿真实例&#xff1a; set ns [new Simulator]为了让nam文件和trace文件有地方可以依托&#xff0c;我们要打开.nam文件进行写入&#xff0c;并且使用句柄nf set nf [open out.nam w] $ns namtrace-all $nf设置拓扑图 1、设置节点的脚本语言&#xff1a;建了两个节点&…

ns2相关学习——TCL脚本编写(2)

下面来学习更加复杂一点的TCL脚本的编写 简述&#xff1a;建立有4个节点的拓扑&#xff0c;其中一个节点作为路由器&#xff0c;用来将两个节点发出的数据包转发到第四个节点上面。 在这里将解释将两个节点的数据流区分开来的方法&#xff0c;展示如何去检测一个队列是否是满…

ns2相关学习——TCL脚本编写(3)

在这里我们将学习动态网络的建立 1、建立拓扑 当节点很多的时候&#xff0c;我们可以使用循环的方式来建立拓扑。 for {set i 0} {$i < 7} {incr i} {set n($i) [$ns node] }这里的数组不需要事先声明。 2、建立链接 这里我们要把7个节点链成一个环儿&#xff0c;同样使用…

NS2相关学习——完成一个新的协议(1)

接下来要进入对我来说老大难的环节了&#xff0c;从表面的TCL慢慢进入到后端的C&#xff0c;一起加油学习吧~ 在本节学习中&#xff0c;将给出一个在ns中实现新的协议的例子。但是可以想见的是&#xff0c;如果由我们自己来完成这个工作&#xff0c;势必要对NS2十分的熟悉并且要…

NS2相关学习——完成一个新协议(2)

在上节中&#xff0c;我们把教程要求的3.1-3.3过了一遍&#xff0c;这一次回到正途上来。看看到底是怎么完成一个新的协议的。 本节中的代码实现了一些简单的“ping”协议&#xff08;灵感来自“ns注释和文档”&#xff08;现在更名为ns手册&#xff09;的第9.6章中的“ping请…

NS2相关学习——完成一个新协议(3)

在前面已经基本学习了怎么完成一个新协议&#xff08;一个神奇的ping协议&#xff0c;然鹅还是有点懵。。。&#xff09; 接下来继续学习相关知识 接着上一部分从1开始 1、必要的修改 如果想要添加添加新的代理程序&#xff0c;就需要修改NS源文件中的内容&#xff0c;特别…

NS2相关学习——创建Xgraph的输出文件

经过前面学习代码的编写&#xff0c;这一部分&#xff0c;我们要学会如何进行分析&#xff0c;一个很直观的方式就是将结果图形化表示出来。 ns-allinone包的一部分是“xgraph”&#xff0c;一个绘图程序&#xff0c;可用于创建模拟结果的图形表示。 在本节中&#xff0c;将向…

NS2相关学习——在ns中模拟无线场景

之前学习的都是有线场景下的NS2相关应用&#xff0c;现在开始&#xff0c;终于要学习无线啦&#xff01;无线是我研究的重点&#xff0c;要好好学习呀&#xff01;在本节中&#xff0c;我们将学习使用ns中提供的移动无线仿真模型。 该部分由两部分组成。 在第一小节中&#xff…

An Energy-Efficient Ant-Based Routing Algorithm for Wireless Sensor Networks (无线传感网中一种基于蚁群算法的能量有效路由)

牙说&#xff1a;这篇论文是研究蚁群算法在能量有效路由协议的过程中必读的一篇文章&#xff0c;原是全英文&#xff0c;在这里按照自己的理解大致翻译成中文&#xff0c;好好学习&#xff0c;与君共勉。 论文题目&#xff1a;An Energy-Efficient Ant-Based Routing Algorith…

活在幻梦中的你我

其实仔细想想,人类和地球上的其它物种有什么不同呢?可能仅有的不同是,人类会去相信那本来并不存在的事情. 并且会为了那种虚幻的东西为止拼搏、努力。比如科技的发展&#xff0c;不就是人类在实现自己想象中的事物么&#xff0c;飞机、轮船、家电、计算机等等&#xff0c;无一…

An Energy-Efficient Ant-Based Routing Algorithm for Wireless Sensor Networks (无线传感网中基于蚁群算法的能量有效路由)2

牙说&#xff1a;接着上一篇继续写。论文标题&#xff1a;An Energy-Efficient Ant-Based Routing Algorithm forWireless Sensor Networks作者&#xff1a;Tiago Camilo, Carlos Carreto, Jorge S Silva, Fernando Boavida正文&#xff1a; 2、相关工作可以考虑无线传感器网络…

NS2仿真分析无线网络的攻击防御(1)

这个学期有个选题是NS2仿真分析无线网络的攻击防御&#xff0c;比较有意思的样子&#xff0c;现在来慢慢学一下这个是什么东西。 首先&#xff0c;还是一篇文章&#xff08;老长老长了&#xff09;&#xff0c;还是全英文的&#xff0c;还是先来分析一下它到底在说什么&#x…

NS2仿真分析无线网络的攻击防御(2)

牙说&#xff1a;继续上一篇博文进行翻译。 4. NS和我们的工作 我们试图评估黑洞攻击在无线Ad-hoc网络中的影响。 为了实现这一点&#xff0c;我们已经使用NS 网络模拟 [14]程序模拟了一个含有黑洞节点的无线自组网络场景。为了模拟无线自组织网络中的黑洞节点&#xff0c;我…

Java集合之HashMap源码分析

以下源码均为jdk1.7 HashMap概述 HashMap是基于哈希表的Map接口的非同步实现. 提供所有可选的映射操作, 并允许使用null值和null健. 此类不保证映射的顺序. 需要注意的是: HashMap不是同步的. 哈希表 哈希表定义: 哈希表是一种根据关键码去寻找值的数据映射结构, 该结构通…

NS2相关学习——可靠的MANET应用程序的Gossip协议分析

好久不写&#xff0c;应该努力啦&#xff01;老师把这篇论文给了我&#xff0c;现在还不知道它在讲什么&#xff0c;来边翻译边学习吧&#xff01; 文章链接&#xff1a;https://www.researchgate.net/publication/316844643_Analyzing_Gossip_Protocols_for_Reliable_MANET_Ap…

Java集合之LinkedList源码分析

概述 LinkedLIst和ArrayLIst一样, 都实现了List接口, 但其内部的数据结构不同, LinkedList是基于链表实现的(从名字也能看出来), 随机访问效率要比ArrayList差. 它的插入和删除操作比ArrayList更加高效, 但还是要遍历部分链表的指针才能移动到下标所指的位置, 只有在链表两头的…

lex和yacc环境配置

lex和yacc的使用很简单&#xff0c;但环境配置却是各种问题&#xff0c;本章说明lex和yacc在windows下的环境配置。 软件需求&#xff1a; 系统 win7-64位(win7-32, win8, win10全部通过) c编译器&#xff1a; vs2010(2008,2013,2015也全部通过) lex和yacc编译器&#xff1a…