c++最短路模型(抓住那头牛)

先看题目:

农夫知道一头牛的位置,想要抓住它。

农夫和牛都位于数轴上,农夫起始位于点 N,牛位于点 K。

农夫有两种移动方式:

从 X 移动到 X−1或 X+1,每次移动花费一分钟

从 X 移动到 2∗X,每次移动花费一分钟

假设牛没有意识到农夫的行动,站在原地不动。

农夫最少要花多少时间才能抓住牛?

输入格式

共一行,包含两个整数N和K。

输出格式

输出一个整数,表示抓到牛所花费的最少时间。

数据范围

0≤N,K≤10^5

输入样例:

cpp 复制代码
5 17

输出样例:

cpp 复制代码
4

代码:

cpp 复制代码
#include<cstring>
#include<iostream>
#include<algorithm>

using namespace std;

const int N = 1e5 + 10;

int n, k;
int q[N];
int dist[N];

int bfs()
{
    memset(dist, -1, sizeof dist);
    dist[n] = 0;
    q[0] = n;
    
    int hh = 0, tt = 0;
    while(hh <= tt)
    {
        int t = q[hh ++];
        
        if(t == k) return dist[t];
        
        if(t + 1 < N && dist[t + 1] == -1)
        {
            dist[t + 1] = dist[t] + 1;
            q[++ tt] = t + 1;
        }
        
        if(t - 1 >= 0 && dist[t - 1] == -1)
        {
            dist[t - 1] = dist[t] + 1;
            q[++ tt] = t - 1;
        }
        
        if(t * 2 < N && dist[t * 2] == -1)
        {
            dist[t * 2] = dist[t] + 1;
            q[++ tt] = t * 2;
        }
    }
    
    return -1;
}

int main()
{
    cin >> n >> k;
    
    printf("%d\n", bfs());
    
    return 0;
}

1、q[]记录跳的点,dist[]记录距离

2、初始化距离,并且最开始的点为n,点n的距离为0

3、判断三种情况,这里顺序随便,因为最终取结果的时候,只会取最先到达的结果

相关推荐
汽车仪器仪表相关领域12 分钟前
全自动化精准检测,赋能高效年检——NHD-6108全自动远、近光检测仪项目实战分享
大数据·人工智能·功能测试·算法·安全·自动化·压力测试
ha204289419416 分钟前
Linux操作系统学习记录之---TcpSocket
linux·网络·c++·学习
Doro再努力43 分钟前
【数据结构08】队列实现及练习
数据结构·算法
AI视觉网奇2 小时前
ue5 插件 WebSocket
c++·ue5
左直拳2 小时前
将c++程序部署到docker
开发语言·c++·docker
恒者走天下2 小时前
AI智能体通讯项目(底层AI通讯协议实现)
c++
英雄各有见2 小时前
Chapter 5.1.1: 编写你的第一个GPU kernel——Cuda Basics
c++·gpu·cuda·hpc
清铎2 小时前
leetcode_day12_滑动窗口_《绝境求生》
python·算法·leetcode·动态规划
linweidong2 小时前
嵌入式电机:如何在低速和高负载状态下保持FOC(Field-Oriented Control)算法的电流控制稳定?
stm32·单片机·算法
梵尔纳多2 小时前
OpenGL着色器语言(GLSL)
c++·opengl·着色器