/**
***= =,好吧我来翻译一下,就是有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;
}
相关推荐
本篇文章将探讨如何利用人工智能技术来实现连连看游戏的自动解谜程序,以及分析此类程序代码的设计思路。 一、连连看游戏规则与策略 连连看的基本规则是找到两个相同的图案,并通过一条没有其他图案阻隔的直线将其...
数独是一种广受欢迎的逻辑游戏,它通过填充一个9×9的网格,使得每一行、每一列以及每一个3×3的小宫格内都包含从1到9的所有数字且不重复,来挑战玩家的推理和逻辑能力。在本项目中,我们将讨论如何使用MATLAB这一...
本文将对基于C++和QT库实现的数字华容道游戏源码进行解析,旨在为学习者提供一个深入理解C++编程、图形界面设计和算法应用的良好实例。 首先,C++是面向对象的编程语言,以其强大的功能和高效性被广泛应用于游戏...
Matlab的易用性和强大的数学计算能力,使得该算法代码具有较好的可读性和扩展性,非常适合大学生用于课程设计、期末大作业和毕业设计。 在附件中,研究者还提供了可直接运行的Matlab程序以及替换数据,这意味着用户...
该文档适用于计算机科学、电子信息工程、数学等专业的学生在进行课程设计、期末大作业以及毕业设计时,作为一个实用且高效的项目参考。通过对该文档的学习和实践,学生能够加深对多种先进算法的理解和应用,提升解决...
适用对象涵盖了计算机科学、电子信息工程、数学等相关专业的学生,他们可以利用这些材料来完成课程设计、期末大作业以及毕业设计。由于代码中替换数据的便捷性以及注释的详尽性,初学者可以较快地掌握算法的精髓,并...
最后,本Matlab程序的适用对象包括计算机、电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。由于代码中包含了详细的注释,因此即便是初学者也能够快速理解并掌握整个程序的编写和运行过程,实现对...
此外,代码中加入了详细的注释,使得即使是编程新手也能快速理解和上手,非常适合计算机、电子信息工程、数学等专业的学生作为课程设计、期末大作业或毕业设计的参考和实践材料。 总体来说,该程序不仅为相关领域的...
代码本身的特点说明了其设计者非常注重程序的可操作性和可维护性,参数化编程使得算法能够快速适应不同的故障识别需求,而清晰的注释则降低了新手的学习难度,有助于学生及研究者在相关的课程设计、期末大作业或毕业...
3. 适用性广:该算法及代码实现不仅适用于数据科学和机器学习领域的研究,也适合计算机科学、电子信息工程、数学等相关专业的大学生课程设计、期末大作业和毕业设计使用。 此外,本代码包附带了案例数据集,用户...
适用对象主要为计算机、电子信息工程、数学等专业的学生,这表明该程序适用于课程设计、期末大作业和毕业设计等多种学习场景。特别是在这些专业的学生面对复杂的数据预测和算法实践时,这种工具可以有效地辅助学生...
此外,代码中加入了详细的注释,使得整个编程思路清晰明了,非常适合计算机、电子信息工程、数学等专业的学生用于课程设计、期末大作业和毕业设计。 整个算法的实现分为几个步骤:首先是数据预处理,包括数据的收集...
此外,这个项目适合的用户群体包括计算机科学、电子信息工程以及数学等专业的大学生,他们可以利用这个项目来完成课程设计、期末大作业或者毕业设计。由于项目中替换数据的便捷性以及注释的详尽性,学生们可以更好地...
该课题不仅涉及到算法设计和程序实现,还需要学生具备一定的数学建模能力、编程技能和系统分析能力。通过这个课题的学习和实践,学生不仅能够掌握遗传算法的基本原理和实现方法,还能加深对机器人路径规划问题的理解...
此外,代码中还包含了详细的注释,使得代码的阅读和理解变得更加容易,非常适合计算机、电子信息工程、数学等专业的大学生进行课程设计、期末大作业以及毕业设计。 综合来看,这项研究为锂电池健康寿命预测提供了一...
在课程设计、期末大作业以及毕业设计等环节中,学生可以使用这套代码作为基础,进行模型的训练和预测,进一步研究和改进交通流量预测的算法。同时,该代码也可以为教师提供教学示例,帮助学生更好地理解MFO和CNN的...
该游戏因其简单易懂且规则明确而广受欢迎,是编程初学者练习算法与逻辑思维的常用项目之一。 在本压缩包文件中,包含了一套用于实现四子棋游戏的Matlab代码。Matlab是一种高性能的数值计算和可视化软件,广泛应用于...
他们可以将这份资料用作课程设计、期末大作业以及毕业设计的参考。案例数据的直接可用性和清晰的注释说明,让这些专业领域的学生能够更快地着手实验和研究工作,无需从零开始搭建模型和编写代码。 优化算法在机器...
这使得本程序具有很好的适用性和普适性,可以广泛应用于计算机科学、电子信息工程、数学等专业的大学生课程设计、期末大作业以及毕业设计等教育和研究领域。通过使用本程序,学生和研究人员可以更加专注于数据预测的...
第四,文档的适用对象是计算机、电子信息工程、数学等专业的大学生,尤其适合作为课程设计、期末大作业和毕业设计的参考资料。这说明文档不仅具有理论深度,也具有很好的教学应用价值。对于学生来说,这是一份宝贵的...