/**
***= =,好吧我来翻译一下,就是有2个数A,B。A可以+1,-1,*2来改变自己的值,上面三种情况都算作操作+1。求A=B所用的最少的操作数。。。。。(0<A,B<100000).
----此题来自百练poj
A:Catch That Cow
查看 提交 统计 提问
总时间限制: 2000ms 内存限制: 65536kB
描述
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 X - 1 or X + 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?
输入
Line 1: Two space-separated integers: N and K
输出
Line 1: The least amount of time, in minutes, it takes for Farmer John to catch the fugitive cow.
*/
#include<iostream>
#include<queue>
#include<string.h>//memset()
using namespace std;
int getMinStepsByBFS(int n,int k){
int xSteps[100001];
memset(xSteps,0,sizeof(xSteps));//这里将所有的该范围内的数都包含,内容为0即未操作过,否则在原来的基础上+1
queue<int> points;//此队列是用来存要进行操作的点
points.push(n);
while(!points.empty()){
int x = points.front();
if(x == k){
return xSteps[k];//广度搜索搜一次就能搜到最优解,因为他是在所有操作数相同的情况下最先搜到的
}else{
points.pop();
for(int i = 0;i < 3;i++){
switch(i){
case 0 :
if(x-1>= 0 && !xSteps[x-1] && x-1!=n){
xSteps[x-1] = xSteps[x]+1;
points.push(x-1);
}
break;
case 1 :
if(x-1 <= 100000 && !xSteps[x+1] && x+1!=n){
xSteps[x+1] = xSteps[x]+1;
points.push(x+1);
}
break;
case 2 :
if(2*x <= 100000 && !xSteps[2*x] && 2*x!=n){
xSteps[2*x] = xSteps[x]+1;
points.push(2*x);
}
break;
default :
cout<<"error"<<endl;
}
}
}
}
}
int main(){
int n,k;
cin>>n>>k;
if(n>=0 && n<=100000 && k>=0 && k<= 100000){
cout<<getMinStepsByBFS(n,k)<<endl;
}
system("pause");
return 0;
}
相关推荐
程序设计大作业基于Qt实现的联网对战不围棋源码.zip程序设计大作业基于Qt实现的联网对战不围棋源码.zip程序设计大作业基于Qt实现的联网对战不围棋源码.zip程序设计大作业基于Qt实现的联网对战不围棋源码.zip程序设计...
《基于Web的实验报告系统设计与实现》 本系统是一个以学生在线提交实验报告和教师在线批阅实验报告为核心功能的Web应用。采用PHP作为主要开发语言,结合CSS和JavaScript技术,构建了一个交互性强、用户体验良好的...
0513《编译原理》作业要求 设计并实现TINYC语言的扫描程序; 要求: 作业内容要求:完成扫描程序的设计与实现,具体要求为: •设计并实现TINYC语言的扫描程序; •完成并提交实验报告,扫描程序的源程序,编译后的可执行...
。2013年春季学期《C++程序设计》作业题目及答案.docx
《C++程序设计教程》(修订版)是钱能教授的经典著作,专注于讲解C++语言的设计思想和实际应用。这本书不仅介绍了C++的基础语法,更深入地探讨了面向对象编程的概念,包括类、对象、继承、多态等核心概念。课后习题...
习题集内容覆盖面广,包括:Java言的基本常识、基本语法、面向对象的基本概念、数组、字符串、异常处理、文件和数据流、图形用户界面设计、小应用程序、线程、编程规范、网络程序设计、多媒体民图形学程序设计以及...
C语言程序设计与实例TXT电子书 1 C语言概述 1.1 C语言的发展过程 1.2 当代最优秀的程序设计语言 1.3 C语言版本 1.4 C语言的特点 1.5 面向对象的程序设计语言 1.6 C和C++ 1.7 简单的C程序介绍 ...
软件设计模式大作业 本资源为一份完整的软件设计模式大作业,涵盖了六...本资源为一份完整的软件设计模式大作业,涵盖了六种设计模式的应用,展示了蛋糕订购系统的设计和实现过程,提供了一个完整的软件设计模式示例。
1、分析典型网络聊天应用软件(如QQ、MSN等)的实现原理,模拟设计一套网络聊天应用程序,必须实现以下功能: ①按照C/S结构分别设计服务端程序和客户端程序; ②服务端通过图形用户界面实现对服务器的控制,负责...
本书为清华大学计算机汇编语言程序设计课教材,主要阐述IBM PC及其兼容机汇编语言程序程序设计的方法和技术。全书共13章:第一、二章介绍基础知识;第三、四章说明IBM PC机的指令系统及包括伪操作在内的汇编语言程序...
张玉生编写的《C语言程序设计》双色版是一本针对初学者的C语言理论教材,它包括了C语言的基础知识、语法结构、数据类型、控制结构、函数、指针、数组、字符串等核心技术内容。该教材不仅适合自学,同时也适合作为...
### Windows程序设计_第5版珍藏版.pdf #### 知识点概览: 1. **书籍概述**:《Windows程序设计(第5版 珍藏版)》是一部经典的Windows编程指南,自出版以来已经帮助近50万名Windows程序员入门并成长为技术专家。 2...
《PHP与MySQL程序设计 第4版 》pdf与源码 是全面讲述PHP与MySQL的经典之作 书中不但全面介绍了两种技术的核心特性 还讲解了如何高效地结合这两种技术构建健壮的数据驱动的应用程序 《PHP与MySQL程序设计 第4版 》...
有关状态机设计方面的书籍,我这里隆重推荐一本:《Practical Statecharts in C/C++ Quantum Programming for Embedded Systems》,中文名叫做《嵌入式系统的微模块化程序设计-实用状态图C/C++实现》,北航出版的,...
《POSIX多线程程序设计》深入描述了IEEE的开放系统接口标准——POSIX线程,通常称为Pthreads标准。本书首先解释了线程的基本概念,包括异步编程、线程的生命周期和同步机制;然后讨论了一些高级话题,包括属性对象、...
第1篇(第1~10章)为autollsp程序设计基础篇,主要介绍了autollsp的基本结构、语法、功能函数、对象属性、循环、判断式、子程序、选择集、符号表、读文件以及写文件等autolisp程序设计的相关知识与技巧。第2篇(第11章...
通过学习这部分源码,开发者可以掌握如何动态加载和修改应用程序资源,以实现更灵活的应用程序设计。 每个章节的".ace"文件,很可能是用特定的压缩格式存储的源代码文件。解压后,开发者可以逐行阅读代码,跟随作者...
本文档是一篇关于基于微信小程序的点餐系统设计与实现的毕业论文,旨在利用微信小程序这一日益普及的技术,优化餐厅点餐流程,提供便捷的在线点餐服务。论文详细介绍了系统的开发背景、技术选型、需求分析、系统设计...
名称:《Linux与Qt程序设计 (陈爽) 高清PDF》 包含Linux的概述 常用的命令 Linux系统的配置和安装,涵盖QT基础知识以及QT高级开发,对于初学者或中高级学者都适用。本书对qt开发者带来很大的帮助。 第一部分:...