当前位置: 首页 > news >正文

[C++]洛谷B3626 跳跃机器人(题干 + 详细讲解, BFS练习题)

题目解析

  • 题干
    • 题目描述
    • 输入格式
    • 输出格式
    • 输入输出样例
      • 样例1
      • 样例2
      • 样例3
      • 样例4
    • 数据范围
    • 知识点提示
    • AC代码与解析

题干

题目描述

地上有一排格子,共n个位置。机器猫站在第一个格子上,需要取第n个格子里的东西。
机器猫当然不愿意自己跑过去,所以机器猫从口袋里掏出了一个机器人!这个机器人的行动遵循下面的规则:
初始时,机器人位于1号格子, 若机器人目前在x格子,那么它可以跳跃到x + 1, x - 1, 2 * x里的一个格子(不允许跳出界
问机器人最少需要多少次跳跃,才能到达n号格子。


输入格式

第1行, 一个正整数n


输出格式

一行, 一个正整数, 表示最小跳跃次数.


输入输出样例

样例1

input输入:

30

expected output期望输出:

6

样例2

input输入:

50

expected output期望输出:

7

样例3

input输入:

64

expected output期望输出:

6

样例4

input输入:

63

expected output期望输出:

8

数据范围

对于100%的数据,有 1≤n≤1000000。




知识点提示

需要运用以下知识点:

  • C++基础语法
  • 简单的bfs广度优先搜索思想及代码实现能力
  • 对于queue队列或vector向量等的了解与灵活运用

拥有以上知识点的掌握之后, 你可以尝试做出这道题.


AC代码与解析

解析请看注释

#include <iostream>
#include <queue>
#include <algorithm>
using namespace std;// 定义全局变量
int n;                // 存储目标数字
bool vis[1000005];    // 访问标记数组,记录数字是否已被访问过
int dis[1000005];     // 距离数组,记录从1到当前数字的最短步数// 广度优先搜索函数,计算从1到n的最短步数
int bfs(){queue<int> q;     // 创建队列用于BFSq.push(1);        // 初始状态:数字1入队vis[1] = true;    // 标记数字1已访问dis[1] = 0;       // 数字1到自身的距离为0while(!q.empty()){  // 当队列不为空时循环int x = q.front();  // 取出队首元素if(x == n) return dis[x];  // 如果找到目标数字,返回当前步数q.pop();            // 弹出队首元素// 尝试三种操作:减1、加1、乘2// 操作1:数字减1int y = x - 1;if(0 <= y && y <= n && !vis[y]){  // 检查数字是否有效且未被访问vis[y] = true;          // 标记已访问dis[y] = dis[x] + 1;    // 更新步数q.push(y);              // 入队}// 操作2:数字加1y = x + 1;if(0 <= y && y <= n && !vis[y]){  // 检查数字是否有效且未被访问vis[y] = true;          // 标记已访问dis[y] = dis[x] + 1;    // 更新步数q.push(y);              // 入队}// 操作3:数字乘2y = x * 2;if(0 <= y && y <= n && !vis[y]){  // 检查数字是否有效且未被访问vis[y] = true;          // 标记已访问dis[y] = dis[x] + 1;    // 更新步数q.push(y);              // 入队}}return -1;  // 如果无法到达目标数字,返回-1
}int main(){cin >> n;            // 输入目标数字cout << bfs() << endl;  // 调用广度优先搜索并输出结果return 0;
}
http://www.xdnf.cn/news/624961.html

相关文章:

  • 安卓11 不带谷歌包默认桌面布局
  • android studio 开启无线调试
  • JVM 的垃圾回收机制 GC
  • QT写槽函数的注意事项
  • 第1周 神经网络基石: 从零构建你的第一个模型
  • 深入理解设计模式之适配器模式
  • 类和对象(1)
  • ai陪伴项目——Android app开发
  • Spring框架--IOC技术
  • 国际前沿知识系列三:解决泛化能力不足问题
  • pytest+allure+allure-pytest 报告输出遇到的问题汇总
  • 计算机网络学习(五)——TCP
  • 【JVM 05-JVM内存结构之-堆】
  • 2025.5个人感悟
  • xdvipdfmx:fatal: File ended prematurely. No output PDF file written.
  • 企业批量处理刚需PrintPDF 网络财务办公打印 网页到 Office 一键转 PDF
  • 二十五、面向对象底层逻辑-SpringMVC九大组件之HandlerMapping接口设计
  • webpack中常见语句命令
  • 使用CodeBuddy实现网页自动连点器
  • OSPF ABR汇总路由
  • 网络层IP协议
  • 无法同步书签,火狐浏览器修改使用国内的账号服务器
  • 网络安全基础--第七课
  • [创业之路-375]:企业战略管理案例分析 - 华为科技巨擘的崛起:重构全球数字化底座的超级生命体
  • C++ 反向迭代器(Reverse Iterator)实现详解
  • MySQL:游标 cursor 句柄
  • 使用 C/C++ 和 OpenCV 进行像素级卷积核运算
  • 文件夹图像批处理教程
  • Python+MCP+LLM
  • Halcon 单目相机标定测量