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

1947抓住那头牛(队列 广度优先搜索)

目录

题目描述

解析

解题思路

代码部分

代码部分

运行结果

看看len数组中各个位置的标记值

为什么这样做一定是最短路径:


题目描述

农夫知道一头牛的位置,想要抓住它。农夫和牛都位于数轴上,农夫起始位于点N(0<=N<=100000),牛位于点K(0<=K<=100000)。农夫有两种移动方式:
1.从X移动到X-1或X+1,每次移动花费一分钟
2.从X移动到2*X,每次移动花费一分钟假设牛没有意识到农夫的行动,站在原地不动。

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

输入
两个整数,N和K。
输出
一个整数,农夫抓到牛所要花费的最小分钟数。

样例输入:

5 17

样例输出:

4

解析

 使用队列:

 

 

解题思路

使用队列从队尾依次传入值;判断队首值是否为所需值。

使用数组对每次将要传入的值做标记。从来没有传入过的值都标记为-1,传入且符合条件的,在上一次符合条件的标记值基础上加1。最终输出牛所在位置的标记值,即为运行了多少次。

代码部分

代码部分

#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
const int N = 1e5;
int len[N];//用于标记的数组定义
int main()
{int n, k;cin >> n >> k;memset(len, -1, sizeof(len));//用于标记的数组初始化//-1:从未进入过队列;  非-1:既表示进入了队列,又表示最短路径中,已经走了第几步。queue<int>q;q.push(n);len[n] = 0;//农夫所在的第一个位置,标记为最短路径中的第0步int x;//记录队首值(为了书写方便)int y[3];//从一个位置可能延伸出的3个子位置while (!q.empty()){x = q.front();if (x == k)break;//如果检索到牛的位置,停止循环q.pop();//如果不是牛的位置,弹出队首元素y[0] = x - 1;y[1] = x + 1;y[2] = 2 * x;for(int i=0;i<3;i++)if (y[i] >= 0 && y[i] < N && len[y[i]] == -1)//判断条件:如果该位置在数组界线内且从来没有进入过队列{q.push(y[i]);//让它进入队列len[y[i]] = len[x] + 1;//又走了一步;}}cout << len[k] << endl;return 0;
}

运行结果

 

看看len数组中各个位置的标记值

#include <iostream>
#include <cstring>
#include <queue>
using namespace std;
const int N = 1e5;
int len[N];//用于标记的数组定义
int main()
{int n, k;cin >> n >> k;memset(len, -1, sizeof(len));//用于标记的数组初始化//-1:从未进入过队列;  非-1:既表示进入了队列,又表示最短路径中,已经走了第几步。queue<int>q;q.push(n);len[n] = 0;//农夫所在的第一个位置,标记为最短路径中的第0步int x;//记录队首值(为了书写方便)int y[3];//从一个位置可能延伸出的3个子位置while (!q.empty()){x = q.front();if (x == k)break;//如果检索到牛的位置,停止循环q.pop();//如果不是牛的位置,弹出队首元素y[0] = x - 1;y[1] = x + 1;y[2] = 2 * x;for(int i=0;i<3;i++)if (y[i] >= 0 && y[i] < N && len[y[i]] == -1)//判断条件:如果该位置在数组界线内且从来没有进入过队列{q.push(y[i]);//让它进入队列len[y[i]] = len[x] + 1;//又走了一步;}}cout << len[k] << endl;//查看:for (int i = 0; i <= k; i++)cout << i << ":" << len[i] << endl;return 0;
}

 运行结果:

 len数组中元素的实际含义:

踩到这个位置上时,这是某条路径的第len[ i ]步

为什么这样做一定是最短路径:

关键词:广度搜索、优先输出。

将最短路径的问题转化为最先输出队列的问题。

 

 

相关文章:

1947抓住那头牛(队列 广度优先搜索)

目录 题目描述 解析 解题思路 代码部分 代码部分 运行结果 看看len数组中各个位置的标记值 为什么这样做一定是最短路径&#xff1a; 题目描述 农夫知道一头牛的位置&#xff0c;想要抓住它。农夫和牛都位于数轴上&#xff0c;农夫起始位于点N(0<N<100000)&…...

基于linux5.15.5的IMX 参考手册 ---21

基于linux5.15.5的IMX 参考手册 — 21 10.5.2高清多媒体接口&#xff08;HDMI&#xff09;和显示端口&#xff08;DP&#xff09;概述 10.5.2.1测试名称 •mxc_cec_test.out 10.5.2.1.1位置 /unit_tests/HDMI/ 10.5.2.1.2功能 验证HDMI CEC功能并向HDMI接收器发送断电命令。 1…...

Android Dalvik虚拟机 堆初始化流程

前言 上篇文章介绍了dalvik虚拟机启动流程&#xff0c;在dalvik虚拟机启动时调用了dvmGcStartup来启动堆。 本文介绍我们在日常开发使用Java时的堆创建流程。 Dalvik堆介绍 Dalvik虚拟机中&#xff0c;堆是由heap[0] Active堆和heap[1] Zygote堆两部分组成的。其中&#xff…...

0讲(补)——开发前必备基本常识

前言 专栏内容持续补充更新,目前正在进行优惠活动 目录 前言 一、函数的声明和定义 二、预编译 三、串口打印中的printf函数的使用...

JS学习笔记

1.WebAPIs简介导读Web APIs 和JS 基础关联性JS 基础阶段以及 Web APIs 阶段JS基础学习 ECMAScript 基础语法为后面作铺垫&#xff0c;Web APIs 是JS 的应用&#xff0c;大量使用JS基础语法做交互效果①JS 基础阶段我们学习的是ECMAScript 标准规定的基本语法要求同学们掌握JS 基…...

linux005之用户、组管理

linux用户管理简介&#xff1a; 任何使用linux系统的用户&#xff0c;都必须使用一个合法的账号和密码&#xff0c;账号和密码一般都是超级管理员创建&#xff0c;当然普通用户也可以创建用户&#xff0c;前提是必须拥有创建用户权限。 root是linux系统中默认创建的超级用户 创…...

列线图工具_Nomogram

定义 列线图是一种相对传统的分析方法&#xff0c;用于展示自变量和因变量的线性关系&#xff0c;及其特征的重要程度。 现在用SHAP&#xff0c;和机器学习库中的 Feature importance 工具可以实现类似甚至更好效果。不过很多传统的研究领域比较认这种方法。 列线图工具建立在…...

【C++】类和对象(一)

目录一、面向过程和面向对象初步认识二、类的引入三、类的定义四、类的访问限定符及封装4.1、访问限定符4.2、封装五、类的作用域六、类的实例化七、类对象的大小八、this指针8.1、this指针的引出8.2、this指针的特性8.3、C语言和C实现Stack的对比一、面向过程和面向对象初步认…...

Python获取搜索引擎结果

前言 想快速获取各个高校的博士招生网站&#xff0c;于是通过python先获取出有可能包含高校博士招生网站的URL&#xff0c;然后通过人为筛选得到了想要的招生网站&#xff08;注意&#xff0c;并非直接爬取&#xff0c;是间接获取的&#xff09;。 整理了一份网站名单&#x…...

2.4.8 PCIe——物理逻辑层——REFCLK

一、概述 pcie的参考时钟由板级输入&#xff0c;提供给IP内PHY层的PLL使用&#xff0c;由PLL产生core_clk和pipe_clk。 二、REFCLK产生方式 Serdes 所用时钟由 PHY 模块内的PLL生成&#xff0c;PLL的参考时钟可以由common clock&#xff08;外部背板提供&#xff09;、separ…...

树莓派4B arm64 搭建 docker+drone+gitea

树莓派4B arm64 搭建 dockerdronegitea 记录时间: 2023年02月10日 树莓派烧录 如何用树莓派搭建一台永久运行的个人服务器&#xff1f; https://mp.weixin.qq.com/s?__bizMzI5NjA0ODkwNA&mid2651847658&idx1&sn267a1257b43d4a76f2a081ed157b77f9&chksmf7b11…...

Java的JDBC编程

目录 1. 打开IDEA&#xff0c;新建Project 2. 引入依赖 &#xff08;1&#xff09;下载驱动包 &#xff08;2&#xff09;将驱动包导入Project 3. 编写代码 &#xff08;1&#xff09;创建数据源 &#xff08;2&#xff09;让代码和数据库服务器建立联系 &#xff08;3&…...

CSS:块格式化上下文(BFC)

块格式化上下文是块级盒子的布局过程发生的区域&#xff0c;也是浮动元素与其他元素交互的区域。 块格式化上下文(BFC)的创建 满足以下条件将创建块格式化上下文&#xff1a; 根元素&#xff08;&#xff09;浮动元素&#xff08;float 值不为 none&#xff09;绝对定位元素…...

paddle表情识别部署

表情识别模块1.环境部署1.1同样采用fastDeploy库1.2相关模型2.封装成静态库2.1参考[百度Paddle中PP-Mattingv2的部署并将之封装并调用一个C静态库](https://blog.csdn.net/weixin_43564060/article/details/128882099)2.2项目依赖添加2.3生成成功3.test3.1创建emotion_test项目…...

Python-第五天 Python函数

Python-第五天 Python函数一、函数介绍1. 什么事函数二、函数的定义1.函数的定义&#xff1a;2.案例三、函数的参数1.函数的传入参数2.案例升级四、函数的返回值1.什么是返回值2.返回值的语法3.None类型4.None类型的应用场景五、函数说明文档1.函数的说明文档2.在PyCharm中查看…...

【Python学习笔记】28.Python3 错误和异常

前言 作为 Python 初学者&#xff0c;在刚学习 Python 编程时&#xff0c;经常会看到一些报错信息&#xff0c;在前面我们没有提及&#xff0c;这章节我们会专门介绍。 Python3 错误和异常 Python 有两种错误很容易辨认&#xff1a;语法错误和异常。 Python assert&#xf…...

SQLServer 迁移到 MySQL 工具对比

我之所以会写这篇对比文章&#xff0c;是因为公司新产品研发真实经历过这个痛苦过程&#xff08;传统基于 SQL Server开发的C/S 产品转为 MySQL云产品&#xff09;。首次需要数据转换是测试环节&#xff0c;当时为了快速验证新研发云产品性能与结果准确性&#xff08;算法类&am…...

分析finebi5.x仪表板组件获取数据过程(数据是数据集或者sql的)

首先仪表板的公共连接类似:http://localhost:37799/webroot/decision/link/Bo6B 当我们访问这个连接时,会来到FineLinkAction的getShareReport方法。 public String getShareReport(HttpServletRequest req, HttpServletResponse res, @FinePathVariable("linkId"…...

设计模式--适配器模式 Adapter Pattern

设计模式--适配器模式 Adapter Pattern适配器模式 Adapter Pattern1.1 基本介绍1.2 工作原理类适配器模式对象适配器模式接口适配器模式小结适配器模式 Adapter Pattern 1.1 基本介绍 &#xff08;1&#xff09;适配器模式将某个类的接口转换成为客户端期望的另一个接口表示&…...

PVE虚拟机篇-rest api

rest api官方介绍 Proxmox VE API rest api文档 rest api文档 rest api token 调用pve rest api ,有两种认证方式 Ticket Cookie Ticket Cookie的方式是最为推荐的&#xff0c;获取的方式为&#xff0c;通过post请求&#xff0c;发送用户名和密码到pve的server端获取tok…...

多模态AI技术助力听障沟通:HI-TransPA系统解析

1. 项目背景与核心价值作为一名长期关注无障碍技术发展的从业者&#xff0c;我见证了太多听障人士在语音沟通场景中面临的困境。传统的手语翻译服务存在人力成本高、响应延迟大等问题&#xff0c;而市面上大多数语音转文字工具又难以处理复杂的环境音和方言口音。这就是我们团队…...

实战应用:在快马平台构建集成imToken的简易DeFi兑换应用前端

最近在做一个DeFi相关的项目&#xff0c;需要集成imToken钱包功能来实现代币兑换和流动性查询。正好发现InsCode(快马)平台可以快速搭建这样的应用&#xff0c;整个过程比想象中顺利很多&#xff0c;记录下实现思路和关键点。 项目整体架构设计 这个简易去中心化交易所前端主…...

构建高效数字工作流:点文件管理与自动化脚本实践指南

1. 项目概述&#xff1a;一个理想数字状态的探索与实践最近在GitHub上看到一个挺有意思的项目&#xff0c;叫“Cyber-Ideal-State”。光看这个名字&#xff0c;可能有点抽象&#xff0c;感觉像是某种哲学探讨或者概念设计。但点进去仔细研究后&#xff0c;我发现它其实是一个非…...

Bibata Cursor:开源鼠标指针主题的设计、安装与深度定制指南

1. 项目概述&#xff1a;不只是换个鼠标指针那么简单 如果你和我一样&#xff0c;每天有超过8小时的时间与电脑屏幕为伴&#xff0c;那么鼠标指针这个看似微不足道的细节&#xff0c;其实在潜移默化中影响着你的操作效率和视觉舒适度。我最初接触 Bibata_Cursor 这个项目&am…...

如何分析表空间碎片率_通过DBA_FREE_SPACE连续相邻块计算

DBA_FREE_SPACE的BYTES总和不小于表空间总空闲量&#xff0c;其差异源于它仅统计连续空闲Extent而非碎片化小块&#xff1b;真正影响业务的是能否满足下一次EXTENT分配需求。查 DBA_FREE_SPACE 时为什么 BYTES 加起来远小于表空间总空闲量&#xff1f;因为 dba_free_space 记录…...

大模型合规审计迫在眉睫!R语言实现FDA级偏见审计报告生成:从Cochran-Armitage趋势检验到SHAP-Adjusted Fairness Index

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;大模型合规审计的监管框架与R语言技术定位 大模型合规审计正面临全球多层监管体系的协同约束&#xff0c;涵盖欧盟《AI法案》、中国《生成式人工智能服务管理暂行办法》及美国NIST AI Risk Management …...

在模型广场中根据任务需求与预算快速筛选合适模型的选型体验

在模型广场中根据任务需求与预算快速筛选合适模型的选型体验 1. 模型广场的核心价值 Taotoken模型广场将主流大模型的接入、选型和切换过程简化为统一界面操作。用户无需在不同厂商平台间反复跳转&#xff0c;即可在一个控制台中完成从浏览模型特性到实际调用的全流程。这种集…...

开源项目终极指南:5分钟让Windows原生显示iPhone照片缩略图

开源项目终极指南&#xff1a;5分钟让Windows原生显示iPhone照片缩略图 【免费下载链接】windows-heic-thumbnails Enable Windows Explorer to display thumbnails for HEIC/HEIF files 项目地址: https://gitcode.com/gh_mirrors/wi/windows-heic-thumbnails 你是否还…...

[具身智能-530]:Trae AI 主导开发:SOLO Builder 擅长“从 0 到 1”的无中生有,而 SOLO Coder 擅长“从 1 到 100”的精雕细琢。

在 Trae 的 SOLO 模式中&#xff0c;SOLO Builder 和 SOLO Coder 是两个核心的智能体&#xff08;Agent&#xff09;&#xff0c;它们虽然都属于“AI 主导开发”的范畴&#xff0c;但定位、适用场景和工作流有着本质的区别。简单来说&#xff1a;SOLO Builder 擅长“从 0 到 1”…...

B站缓存视频转换完整指南:3分钟学会m4s无损转MP4

B站缓存视频转换完整指南&#xff1a;3分钟学会m4s无损转MP4 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾遇到过这样的困扰&#xff…...