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

洛谷 P1135 奇怪的电梯

链接直达:P1135 奇怪的电梯 - 洛谷 | 计算机科学教育新生态

题目来源

洛谷

题目内容

奇怪的电梯

题目背景

感谢 @yummy 提供的一些数据。

题目描述

呵呵,有一天我做了一个梦,梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯,而且第 i i i 层楼( 1 ≤ i ≤ N 1 \le i \le N 1iN)上有一个数字 K i K_i Ki 0 ≤ K i ≤ N 0 \le K_i \le N 0KiN)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如: 3 , 3 , 1 , 2 , 5 3, 3, 1, 2, 5 3,3,1,2,5 代表了 K i K_i Ki K 1 = 3 K_1=3 K1=3 K 2 = 3 K_2=3 K2=3,……),从 1 1 1 楼开始。在 1 1 1 楼,按“上”可以到 4 4 4 楼,按“下”是不起作用的,因为没有 − 2 -2 2 楼。那么,从 A A A 楼到 B B B 楼至少要按几次按钮呢?

输入格式

共二行。

第一行为三个用空格隔开的正整数,表示 N , A , B N, A, B N,A,B 1 ≤ N ≤ 200 1 \le N \le 200 1N200 1 ≤ A , B ≤ N 1 \le A, B \le N 1A,BN)。

第二行为 N N N 个用空格隔开的非负整数,表示 K i K_i Ki

输出格式

一行,即最少按键次数,若无法到达,则输出 -1

样例 #1

样例输入 #1

5 1 5
3 3 1 2 5

样例输出 #1

3

提示

对于 100 % 100 \% 100% 的数据, 1 ≤ N ≤ 200 1 \le N \le 200 1N200 1 ≤ A , B ≤ N 1 \le A, B \le N 1A,BN 0 ≤ K i ≤ N 0 \le K_i \le N 0KiN

本题共 16 16 16 个测试点,前 15 15 15 个每个测试点 6 6 6 分,最后一个测试点 10 10 10 分。

知识点

  1. BFS
  2. Dijkstra

题目思路

题目提到最短路径就想到可以用BFS和迪杰斯特拉,比较快,这里只讲BFS

BFS思路:

首先,通过输入获取数组长度N,起始位置A和目标位置B。通过输入获取数组K的值,K用于存储每个位置的移动范围。
使用队列q进行广度优先搜索,初始时将起始位置A入队,并标记为已访问。当队列不为空时,进行循环,每次从队列中取出一个位置,并判断是否等于目标位置B,如果是,则更新ans为当前步数,并结束搜索。 如果不是,则判断当前位置加上K的值和减去K的值是否在有效范围内且未被访问如果是,则将新位置入队,并标记为已访问。
最后,根据ans的值输出结果,如果ans等于INT_MAX,则输出-1表示无解。

注意:

  1. 数组下标从一开始,和题意一致不容易出错,没开大数组 wa76
  2. 先判断新的下标是否合法,不然容易查看vis数组会数组越界 AC100

AC代码

  1. BFS版
//
// Created by Jisam on 2024/7/7.
//
#include <bits/stdc++.h>
#define PSI pair<string,int>
#define PII pair<int,int>
#define x first
#define y second
// 使用命名空间std,方便访问标准库中的函数和对象
#define code_by_jisam ios::sync_with_stdio(false),cin.tie(nullptr)
using namespace std;// 定义常量N,表示最大值为10^5+5
const int N = 1e5 + 5;// 定义全局变量ans,用于存储从A到B的最小步数,初始值设为INT_MAX表示未找到路径
int ans = INT_MAX;// 定义函数solve,用于解决从位置A到位置B的最小步数问题
void solve() {// 输入N,A,B,分别表示数组长度和起始、目标位置int N, A, B;cin >> N >> A >> B;// 初始化数组K和vis,K用于存储每个位置的移动范围,vis用于标记位置是否已被访问vector<int> K(N + 2, 0), vis(N + 2, 0);// 输入数组K的值for (int i = 1; i <= N; i++) {cin >> K[i];}// 使用队列q来进行广度优先搜索queue<PII> q;q.push({A, 0}); // 将起始位置A入队,并标记为已访问vis[A] = 1;// 当队列不为空时,进行循环while (q.size()) {// 出队并获取当前位置和步数int tx = q.front().x;int ty = q.front().y;q.pop();// 如果当前位置等于目标位置B,则更新ans为当前步数,并结束搜索if (tx == B) {ans = ty;break;}// 如果当前位置加上K的值在有效范围内且未被访问,则将新位置入队,并标记为已访问if (tx + K[tx] > 0 && tx + K[tx] <= N && !vis[tx + K[tx]]) {q.push({tx + K[tx], ty + 1});vis[tx + K[tx]] = 1;}// 如果当前位置减去K的值在有效范围内且未被访问,则将新位置入队,并标记为已访问if (tx - K[tx] > 0 && tx - K[tx] <= N && !vis[tx - K[tx]]) {q.push({tx - K[tx], ty + 1});vis[tx - K[tx]] = 1;}}// 根据ans的值输出结果,如果ans等于INT_MAX,则输出-1表示无解if (ans == INT_MAX) {cout << -1;} else {cout << ans;}
}// 主函数
int main() {code_by_jisam;// 调用solve函数解决问题solve();// 程序正常退出return 0;
}

相关文章:

洛谷 P1135 奇怪的电梯

链接直达&#xff1a;P1135 奇怪的电梯 - 洛谷 | 计算机科学教育新生态 题目来源 洛谷 题目内容 奇怪的电梯 题目背景 感谢 yummy 提供的一些数据。 题目描述 呵呵&#xff0c;有一天我做了一个梦&#xff0c;梦见了一种很奇怪的电梯。大楼的每一层楼都可以停电梯&…...

vue使用axios请求后端数据

前后端分离项目的基础&#xff1a; 前后端跨域访问 vite.config.js中加入 // 1.为什么要跨域 //因为浏览器的同源策略,不同站点之间访问需要跨域 //实现跨域的方式&#xff1a;server: {proxy: {// 假设要跨域访问的后端 API 地址以 /api 开头/api: { //表示拦截以/api开头的…...

目标检测 | yolov10 原理和介绍

相关系列&#xff1a; 目标检测 | yolov1 原理和介绍 目标检测 | yolov2/yolo9000 原理和介绍 目标检测 | yolov3 原理和介绍 目标检测 | yolov4 原理和介绍 目标检测 | yolov5 原理和介绍 目标检测 | yolov6 原理和介绍 目标检测 | yolov7 原理和介绍 目标检测 | yolov8 原理和…...

基于Springboot 和Vue 的高校宿舍管理系统源码

网络上很多宿舍管理系统都不完整&#xff0c;大多数缺少数据库文件&#xff0c;所在使用极其不方便&#xff0c;由于本人程序员&#xff0c;根据代码&#xff0c;自己花时间不全了数据库文件&#xff0c;并且可以完美运行&#xff01;&#xff01;&#xff01;&#xff01;&…...

3:2比例的程序员专业显示器,效率提升显著,摸鱼时间又多了

对于我们程序员来说&#xff0c;显示器的重要性不言而喻&#xff0c;作为我们与代码交流的直接工具&#xff0c;他影响着我们的工作效率、舒适度和整体编程体验。我在家用的是自己笔记本的屏幕&#xff0c;简单写写代码还行&#xff0c;涉及到多任务协同或者大代码量开发就有点…...

vue3 cascader省市区三级联动如何指定字段,如何根据id查到对应的名字

如果我们接口数据字段名不是value和code。要加个props :props"{ value:code,label:regionName}"根据id查name需要一个ref和一个change事件<el-cascader :options"areaData" ref"addressCodeRef" change"handleChange" :props"…...

算法4:前缀和(上)

文章目录 一维前缀和二维前缀和寻找数组的中心下标除自身以外数组的乘积 一维前缀和 二维前缀和 寻找数组的中心下标 class Solution { public:int pivotIndex(vector<int>& nums) {int n nums.size();vector<int> f(n), g(n);f[0] nums[0];g[n - 1] num…...

美国政府紧急应对三星Galaxy手机安全漏洞

一、美国政府紧急通知更新三星Galaxy手机系统 美国政府近日发布紧急通知&#xff0c;要求联邦政府雇员在8月28日前更新三星Galaxy手机系统&#xff0c;否则将面临禁止使用这些设备的后果。这是继7月针对Pixel手机用户的类似要求之后的又一次紧急行动。此次事件的导火索是谷歌发…...

看 逆行人生

电影和我的职业本身有相关性&#xff0c;而且我特别喜欢徐峥执导的电影&#xff0c;这次的题材也算是碰上自己的胃口。 周六&#xff0c;下了大半天的雨&#xff0c;早上驱车到公司加班&#xff0c;下午六点多到时候特别想去看电影&#xff0c;果断再驱车从公司赶回来&#xff…...

0819、0820梳理及一些面试题梳理

一、抓包分析 二、HTTP服务器 三、动态库与静态库 四、一些面试题 指针数组和数组指针的区别&#xff1a;指针数组本质是一个数组&#xff0c;只是数组中存储的是指针变量。数组指针存储的是该数组的起始地址&#xff0c;对该指针来说每偏移一个单位就是偏移了一整个数组的地…...

HttpUtils工具类(一)常见的HttpUtils工具类及如何自定义java的http连接池

目录 一、几种常见的Http调用方式 1. 使用 Apache HttpClient 2. 使用 OKhttpClient 3. 使用第三方库&#xff08;Hutool&#xff09;的http链接池 4. 使用 Spring RestTemplate 5. 使用 Java 原生的HttpURLConnection 二、总结 常用三种HttpUtils对比总结 一、几种常见…...

使用 Lombok 遇到一个问题

起因是换了一个电脑&#xff0c;重新从服务器上拉了一个项目。项目是由maven构建的&#xff0c;在控制台中使用mvn命令编译项目时&#xff0c;没有任何问题&#xff0c;编译成功。如下图&#xff1a; 可是idea里面的源码&#xff0c;却标红了&#xff0c;如下&#xff1a; 错误…...

Linux基础环境开发工具gcc/g++ make/Makefile

1.Linux编译器-gcc/g使用 1. 预处理&#xff08;进行宏替换) 预处理功能主要包括宏定义,文件包含,条件编译,去注释等。 预处理指令是以#号开头的代码行。 实例: gcc –E hello.c –o hello.i 选项“-E”,该选项的作用是让 gcc 在预处理结束后停止编译过程。 选项“-o”是指目标…...

ES 模糊查询 wildcard 的替代方案探索

一、Wildcard 概述 Wildcard 是一种支持通配符的模糊检索方式。在 Elasticsearch 中&#xff0c;它使用星号 * 代表零个或多个字符&#xff0c;问号 ? 代表单个字符。 其使用方式多样&#xff0c;例如可以通过 {"wildcard": {"field_name": "value&…...

Linux安装MQTT 服务器(图文教程)

MQTT&#xff08;Message Queuing Telemetry Transport&#xff09;是一种轻量级的消息传输协议&#xff0c;专为低带宽和不稳定的网络环境设计&#xff0c;非常适合物联网&#xff08;IoT&#xff09;应用。 官网地址&#xff1a;https://www.emqx.com/ 一、版本选择 根据自己…...

【TCP】核心机制:延时应答、捎带应答和面向字节流

文章目录 延时应答捎带应答面向字节流粘包问题方案一&#xff1a;指定分隔符方案二&#xff1a;指定数据的长度 TCP 报头首部长度保留&#xff08;6 位&#xff09;选项序号确认序号 延时应答 尽可能降低可靠传输带来的性能影响 提升性能>让滑动窗口变大 如果我们立即返回 …...

题解:AT_abc352_e [ABC352E] Clique Connect

[题目通道]([ABC352E] Clique Connect - 洛谷) 鄙人今日写人生第一篇题解 希望管理大大通过 首先&#xff0c;我们先看题: 它说一共有n个点&#xff0c;m回操作。。。 每次操作 都有 一个Ki 和 Ci Ki代表有Ki个点,Ci代表每条边所赋的边权 一看就知道这是个最小生成树的板子…...

【代码随想录训练营第42期 Day32打卡 - 从零开始动态规划 - LeetCode 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯

目录 一、做题心得 二、动规五步走 三、题目与题解 题目一&#xff1a;509. 斐波那契数 题目链接 题解1&#xff1a;记忆性递归 题解2&#xff1a;动态规划 题目二&#xff1a;70. 爬楼梯 题目链接 题解&#xff1a;动态规划 题目三&#xff1a;746. 使用最小花费爬楼…...

源码构建LAMP

目录 一、安装Apache 二、安装Mysql 三、安装PHP 四、安装论坛 一、安装Apache 1.cd 到opt目录下面&#xff0c;将压缩包拉进Xhell 2.解压缩apr和httpd压缩包 tar xf apr-1.6.2.tar.gz tar xf apr-util-1.6.0.tar.gz tar xf httpd-2.4.29.tar.bz2 3.将apr-1.6.2 移动到ht…...

Java:封装树结构

实体类 public class DictTreeselectVO {private String value;private String label;/*** 节点*/private String parentId;private List<DictTreeselectVO> children new ArrayList<DictTreeselectVO>();public String getValue() {return value;}public void s…...

从物理层到数据链路:深入解析CAN总线的核心通信机制

1. CAN总线的前世今生&#xff1a;为什么我们需要它&#xff1f; 想象一下你正在组装一辆智能汽车&#xff0c;发动机、变速箱、ABS、仪表盘这些部件都需要互相"对话"。如果每个设备都用独立线路连接&#xff0c;光是布线就能让工程师崩溃。这就是CAN总线诞生的背景—…...

Graphormer惊艳案例:从SMILES到三维构象倾向性预测的延伸应用探索

Graphormer惊艳案例&#xff1a;从SMILES到三维构象倾向性预测的延伸应用探索 1. 模型概述 Graphormer是微软研究院开发的一款基于纯Transformer架构的图神经网络模型&#xff0c;专门为分子图&#xff08;原子-键结构&#xff09;的全局结构建模与属性预测而设计。与传统图神…...

全志Tiger-ISP调试工具安装与使用全攻略

1. 全志Tiger-ISP调试工具入门指南 第一次接触全志Tiger-ISP调试工具时&#xff0c;我也是一头雾水。这个工具主要用于图像信号处理器(ISP)的调试和优化&#xff0c;是开发智能摄像头、行车记录仪等视觉设备的必备利器。简单来说&#xff0c;它能让你像调色师一样精细调整图像的…...

深度学习模型过拟合的实战诊断与优化策略

1. 过拟合现象的诊断方法 第一次训练神经网络时&#xff0c;我盯着训练准确率冲到99%兴奋不已&#xff0c;结果测试集表现只有65%——这就是典型的过拟合现场。判断模型是否过拟合&#xff0c;就像医生看体检报告&#xff0c;需要多维度交叉验证。 最直观的方法是训练集与验证集…...

Planetscale:免费云数据库的快速入门与实战指南

1. Planetscale是什么&#xff1f;为什么开发者都在用&#xff1f; 第一次听说Planetscale时&#xff0c;我也和大多数开发者一样好奇&#xff1a;这个号称"开发者友好"的云数据库到底有什么特别&#xff1f;用了半年后终于明白&#xff0c;它就像是数据库界的GitHub…...

OpenClaw与Qwen3-14B联调指南:解决模型响应超时与截断问题

OpenClaw与Qwen3-14B联调指南&#xff1a;解决模型响应超时与截断问题 1. 问题背景与挑战 上周我在尝试用OpenClaw自动化处理一批技术文档时&#xff0c;遇到了一个棘手的问题&#xff1a;当任务链超过5个步骤时&#xff0c;Qwen3-14B模型经常出现响应超时或输出截断。这直接…...

告别手动刷课!智慧树网课助手让你的学习效率提升50%

告别手动刷课&#xff01;智慧树网课助手让你的学习效率提升50% 【免费下载链接】zhihuishu 智慧树刷课插件&#xff0c;自动播放下一集、1.5倍速度、无声 项目地址: https://gitcode.com/gh_mirrors/zh/zhihuishu 你是否厌倦了在智慧树平台上频繁点击"下一集"…...

用Python手搓一个简易飞行仿真器:从状态机到轨迹计算的保姆级教程

用Python手搓一个简易飞行仿真器&#xff1a;从状态机到轨迹计算的保姆级教程 飞行仿真技术听起来像是航空航天工程师的专属领域&#xff0c;但你知道吗&#xff1f;用Python和一些基础库&#xff0c;我们完全可以构建一个简化版的飞行仿真系统。本文将带你从零开始&#xff0…...

OpenSpeedy高效构建与分发指南:从源码到部署的全流程实践

OpenSpeedy高效构建与分发指南&#xff1a;从源码到部署的全流程实践 【免费下载链接】OpenSpeedy &#x1f3ae; An open-source game speed modifier. 项目地址: https://gitcode.com/gh_mirrors/op/OpenSpeedy OpenSpeedy作为一款专注于提升GitHub资源访问速度的开源…...

亚马逊/Shopee关键词排名高就一定好?你可能陷入了“数据幻觉”

关键词排名高只说明“看得见”&#xff0c;不代表“卖得动”&#xff0c;更不等于“值得投”。理论锚点信息经济学信号噪音理论&#xff1a;排名只是表层信号&#xff0c;可能混杂品牌词截流等无关信息。SEO 搜索意图分类&#xff1a;信息型搜索不等于交易型搜索。一、误区揭露…...