Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. He starts at a point N (0 ≤ N ≤ 100,000) on a number line and the cow is at a point K (0 ≤ K ≤ 100,000) on the same number line. Farmer John has two modes of transportation: walking and teleporting.

* Walking: FJ can move from any point X to the points - 1 or + 1 in a single minute
* Teleporting: FJ can move from any point X to the point 2 × X in a single minute.

If the cow, unaware of its pursuit, does not move at all, how long does it take for Farmer John to retrieve it?

Input

Line 1: Two space-separated integers: N and K

Output

Line 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow.

Sample

Inputcopy Outputcopy
5 17
4

Hint

The fastest way for Farmer John to reach the fugitive cow is to move along the following path: 5-10-9-18-17, which takes 4 minutes.

首先看到这种题就要想到广度优先搜索,因为这里是要不断的试探哪个能够到达目的地,并且还要判断最短的步数,通过queue就可以很好的判断最短步数,因为在队列中是先进先出,并且在这个题中,每一个试探x-1,x+1,x*2都是同等的一次试探,每一次都是前面一次加1,所以当走了相同的步数有一种情况已经到达了终点了就是最短的步数,因为不可能出现一个y=x-1d的同时还等于x+1还等于x*2是吧,所以当他们三种情况都是在相同的步数下有种情况先到了那就是最少的 步数


#include<iostream>
#include<string>
#include<math.h>
#include<algorithm>
#include<map>
#include<set>
#include<queue>
using namespace std;
int vis[200005];struct node{int x,step;
};
queue<node>q;
int bfs(int x,int y){node start,next,now;start.x=x,start.step=0;//初始化vis[x]=1;q.push(start);while(!q.empty()){now=q.front();//相当于一个中间变量,保留上一个值    if(now.x==y){return now.step ;}q.pop(); //先判断是否到达目的地,没有就出站,因为它的值已经被保留了 if(now.x-1>=0&&!vis[now.x-1]){next.x=now.x-1;next.step=now.step+1;vis[now.x-1]=1;q.push(next);}if(now.x+1<=y&&!vis[now.x+1]){next.x=now.x+1;next.step=now.step+1;//这里的now.step与上一个if和下一个if条件中的是一个值,//这就是为了保证这三步都是在一个步骤下,下一步谁先到了谁就是最短的 vis[now.x+1]=1;q.push(next);}if(now.x<=y&&!vis[now.x*2]){ //这里要注意不能是now.x*2<=y//因为如果这样的话它本身并没有超出范围,但是会少走这里一步 next.x=now.x*2;next.step=now.step+1;vis[now.x*2]=1;q.push(next);}}
}
int main(){ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int n,m;cin>>n>>m;cout<<bfs(n,m)<<endl;return 0;
}

Catch That Cow(详解)相关推荐

  1. php try 中 抛出异常处理,php中try catch捕获异常实例详解

    php中try catch可以帮助我们捕获程序代码的异常了,这样我们可以很好的处理一些不必要的错误了,感兴趣的朋友可以一起来看看. PHP中try{}catch{}语句概述 PHP5添加了类似于其它语 ...

  2. try catch finally语句详解

    定义以及用法: try catch finally 语句用于处理代码中可能出现的错误信息. 错误可能是语法错误,通常是程序员造成的编码错误或错别字.也可能是拼写错误或语言中缺少的功能(可能由于浏览器差 ...

  3. php中try catch捕获异常实例详解

    本文实例讲述了php中try catch捕获异常.分享给大家供大家参考.具体方法分析如下: php中try catch可以帮助我们捕获程序代码的异常了,这样我们可以很好的处理一些不必要的错误了,感兴趣 ...

  4. try、catch、finally详解

    第一种情况: try.catch.finally三段代码中都含有return时,则以finally中的retrun为准,其它return均无效:但是其它return之前的代码有效. 第二种情况: tr ...

  5. ES6 — Promise基础用法详解(resolve、reject、then、catch,all,)

    ES6 - Promise基础用法详解 Promise 是一个构造函数,它自身拥有all.reject.resolve这几个眼熟的方法, 原型上有then.catch等同样熟悉的方法. 所以,在开始一 ...

  6. python try catch打印到日志_django 捕获异常和日志系统过程详解

    这一块的内容很少, 异常使用try except即可, 日志只需要几行配置. 使用装饰器捕获方法内的所有异常 我使用装饰器来整个包裹一个方法, 捕获方法中的所有异常信息.并将其转为json返回客户端. ...

  7. JUC详解(各种乱七八糟的锁)

    文章目录 1JUC 2回顾多线程知识 3Lock锁(重点) 4Lock锁 5JUC版的生产者与消费者问题(虚假唤醒) 6有序线程 7八锁问题 8CopyOnWriteArrayList(读写复制) 9 ...

  8. Redis 配置详解 —— 全网最新最全

    文章目录 一.撰文目的 二.配置详解 1. EXAMPLE(概要说明) 2.INCLUDES(配置包含) 3.MODULES(加载模块) 4.NETWORK(网络配置) 5.TLS/SSL(通讯协议) ...

  9. 刘铁锰老师C#语言入门详解(委托事件等部分有详细代码和注释)

    目录 1.初识类 1.1 类与对象的关系 1.2 类的三大成员 1.3 静态成员与实例成员 1.4 类修饰符 2.构成C#语言的基本元素 2.1 六个基本元素 2.2 算法简介 3. 详解类型.变量与 ...

  10. 高并发之并发容器详解

    高并发之并发容器详解 一.vector Vector 是矢量队列,它是JDK1.0版本添加的类.继承于AbstractList,实现了List, RandomAccess, Cloneable这些接口 ...

最新文章

  1. FPGA之道(12)FPGA芯片的配置方式
  2. 《程序设计与数据结构》第6周学习总结
  3. java黄油刀_一篇文章玩转ButterKnife,让代码更简洁
  4. 编译错误syntax error : missing ';' before 'type'原因探寻
  5. LoadRunner如何调用外部函数
  6. python读写excel的图片_python解析excel中图片+提取图片
  7. window难以实现的linux,工欲善其事必先利其器--几步实现window与linux之间的文件共享...
  8. 《Linux命令行与shell脚本编程大全》第十二章 使用结构化命令
  9. Spring框架 @ResponseBody注解 编码问题: 论设置 Accept 的重要性
  10. openconnection java_java – 是否真的有必要使用url.openConnection()?
  11. AHP(层次分析法)的全面讲解及python实现
  12. 虚函数指针 虚函数表
  13. Oracle导入sas数据集,来自SAS数据集的Oracle表
  14. 激活 win10 企业版2016长期服务版本
  15. 【linux】利用ssh、sshpass和rsync命令,实现免密同步文件,指定非22端口
  16. Spark 基础知识
  17. 面包店算法c语言,Lamport面包店算法
  18. 往服务器抛数以及从服务器读数(AL11的具体用法)
  19. 华中科技大学非全日制计算机上课,2019年华中科技大学在职研究生是怎么上课的...
  20. 深入浅出学Spring Data JPA , Predicate

热门文章

  1. SAP FICO会计本年利润结转
  2. ggplot2-用图层构建图像2
  3. 基于IjkPlayer的视频播放器
  4. 你知道数据中台,但你不知道它和ERP、数据仓库背后的关系
  5. 奥地利和德国的装饰艺术
  6. C#_DataTable简介
  7. Spring Boot多模块包扫描问题
  8. 如何利用python刷微博粉丝最多的明星_明星微博粉丝究竟有多少是真的?
  9. 转化率中找淘宝店铺推广方法(转)
  10. 【国企改革观象台】开展体系化能力建设,筑牢网络安全基石 - 国企十四五安全规划的思考(下)