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、判断三种情况,这里顺序随便,因为最终取结果的时候,只会取最先到达的结果

相关推荐
NAGNIP6 小时前
轻松搞懂全连接神经网络结构!
人工智能·算法·面试
NAGNIP7 小时前
一文搞懂激活函数!
算法·面试
董董灿是个攻城狮7 小时前
AI 视觉连载7:传统 CV 之高斯滤波实战
算法
爱理财的程序媛13 小时前
openclaw 盯盘实践
算法
端平入洛14 小时前
auto有时不auto
c++
MobotStone16 小时前
Google发布Nano Banana 2:更快更便宜,图片生成能力全面升级
算法
颜酱20 小时前
队列练习系列:从基础到进阶的完整实现
javascript·后端·算法
用户57573033462420 小时前
两数之和:从 JSON 对象到 Map,大厂面试官到底在考察什么?
算法
程序猿追20 小时前
“马”上行动:手把手教你基于灵珠平台打造春节“全能数字管家”
算法