SDUT_1028_Catch That Cow(bfs)

本文介绍了一个有趣的算法问题——如何在数轴上以最少步骤从一个起点到达另一个终点,可以通过步行或传送的方式移动。提供了详细的解决方案及代码实现。

Problem Description

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?

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.

Example Input

5 17

Example Output

4

题意:在一个数轴上,人在N位置,牛在K位置,人去找牛(人从 N到K),牛不动,人有两种走法,一种是+1或-1,另一种是在x位置,直接跳到2*x位置。(说明x 到x+1,x-1,2*x是连通的)
示例是 : 5 17
可以 从5跳到10,再从10到9,从9跳到18,从18到17,走4步;
也可以 5->4,4->8,8->16,16->17 都是4 步,用的步数最少;
分析:
当人的位置小于牛的位置,即n < k 时,可以进行+ 、-、 * ,因为通过这些都可以增大,而 n > k时只能进行 减 ,这样才能找到牛。
当找到牛的时候,输出所用的步数。

代码
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int book[500005];

struct node
{
    int x;
    int s;
}que[500005];
int main()
{
    int n,k;
    int head = 1;
    int tail = 1;
    scanf("%d%d",&n,&k);

    que[head].x = que[tail].x = n;
    que[tail++].s = 0;
    book[n] = 1;
    while(head < tail)
    {
        int m = que[head].x;
        //找到牛
        if(m == k)
        {
            printf("%d\n",que[head].s);
            break;
        }
        //人的位置小于牛的
        if(m <= k&&book[m-1]==0)
        {
            book[m-1]=1;
            que[tail].x = m-1;
            que[tail++].s = que[head].s+1;
        }
        if(m <= k && book[m+1]==0)
        {
            book[m+1]=1;
            que[tail].x = m+1;
            que[tail++].s = que[head].s+1;
        }
        if(m <= k&&book[m*2]==0)
        {
            book[m*2] = 1;
            que[tail].x = m*2;
            que[tail++].s = que[head].s+1;
        }
        //人的位置大于牛
        if(m > k && book[m-1]==0)
        {
            book[m-1]=1;
            que[tail].x = m-1;
            que[tail++].s = que[head].s+1;
        }
        head ++ ;
    }
    return 0;
}
基于STM32 F4的永磁同步电机无位置传感器控制策略研究内容概要:本文围绕基于STM32 F4的永磁同步电机(PMSM)无位置传感器控制策略展开研究,重点探讨在不依赖物理位置传感器的情况下,如何通过算法实现对电机转子位置和速度的精确估计与控制。文中结合嵌入式开发平台STM32 F4,采用如滑模观测器、扩展卡尔曼滤波或高频注入法等先进观测技术,实现对电机反电动势或磁链的估算,进而完成无传感器矢量控制(FOC)。同时,研究涵盖系统建模、控制算法设计、仿真验证(可能使用Simulink)以及在STM32硬件平台上的代码实现与调试,旨在提高电机控制系统的可靠性、降低成本并增强环境适应性。; 适合人群:具备一定电力电子、自动控制理论基础和嵌入式开发经验的电气工程、自动化及相关专业的研究生、科研人员及从事电机驱动开发的工程师。; 使用场景及目标:①掌握永磁同步电机无位置传感器控制的核心原理与实现方法;②学习如何在STM32平台上进行电机控制算法的移植与优化;③为开发高性能、低成本的电机驱动系统提供技术参考与实践指导。; 阅读建议:建议读者结合文中提到的控制理论、仿真模型与实际代码实现进行系统学习,有条件者应在实验平台上进行验证,重点关注观测器设计、参数整定及系统稳定性分析等关键环节。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值