洛谷P1135 奇怪的电梯——广搜

简介: 洛谷P1135 奇怪的电梯——广搜

题目描述

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


输入格式

共二行。

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

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


输出格式

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

输入输出样例

输入

5 1 5

3 3 1 2 5


输出

3


说明/提示

对于 100% 的数据,1≤N≤200,1≤A,B≤N,0≤Ki≤N。

#include<bits/stdc++.h>
using namespace std;
int n,a,b,e[210],vis[210];
int main()
{
  cin>>n>>a>>b;
  for(int i=1;i<=n;i++)
  {
    cin>>e[i];
  }
  queue<int>f;
  queue<int>s;
  f.push(a);
  s.push(0);
  vis[a]=1;
  while(!s.empty())
  {
    if(f.front()==b)
    {
      cout<<s.front()<<endl;
      return 0;
    }
    int t=f.front()+e[f.front()];//上升楼层 
    if(t<=n&&vis[t]==0)
    {
      f.push(t);
      s.push(s.front()+1);
      vis[t]=1;
    }
    t=f.front()-e[f.front()];//下降楼层 
    if(t>=1&&vis[t]==0)
    {
      f.push(t);
      s.push(s.front()+1);
      vis[t]=1;
    }
    f.pop();
    s.pop();
  }
  cout<<-1<<endl;
  return 0;
}
目录
相关文章
|
存储 缓存 算法
【OSTEP】分页: 快速地址转换(TLB) | TLB命中处理 | ASID 与页共享 | TLB替换策略: LRU策略与随机策略 | Culler定律
【OSTEP】分页: 快速地址转换(TLB) | TLB命中处理 | ASID 与页共享 | TLB替换策略: LRU策略与随机策略 | Culler定律
811 0
|
10月前
|
Python Windows
Miniconda 安装与环境配置全流程图解(2025 最新版)
Miniconda 可以看作是 Anaconda 的“轻装版”,只自带 conda 包管理器与基础的 Python 运行时。它体积小、部署速度快,特别适合按需创建与管理虚拟环境的用户。与 Anaconda 相比,Miniconda 不会预先安装一大堆科学计算库,你可以根据项目需求再单独选择、安装需要的包,因此整体更轻巧、更灵活。 本文将手把手演示在 Windows 下安装 Miniconda 的全过程:从下载安装器、完成向导配置、设置环境变量,到最后的基础验证与简单示例,帮助你迅速把 Miniconda 用起来。
11350 12
|
11月前
|
JavaScript Java 关系型数据库
基于springboot的非遗传承宣传平台
本项目基于SpringBoot、Vue、MySQL等技术,构建非遗传承宣传平台,实现非遗资源的数字化存储与传播。通过图文、视频、互动社区等形式,打破时空限制,提升公众参与度,助力传统文化保护与传承。
|
运维 Ubuntu 安全
Ubuntu 精通之路:12 个核心知识点从入门到高手
掌握这些知识点需要不断的学习和实践。建议在实际工作中多应用,将理论与实践相结合。遇到问题多查阅文档,多与社区交流。只有不断实践,不断积累,才能真正掌握 Ubuntu。
|
存储 Java Serverless
【数据结构】哈希表&二叉搜索树详解
本文详细介绍了二叉搜索树和哈希表这两种数据结构。二叉搜索树是一种特殊二叉树,具有左子树节点值小于根节点、右子树节点值大于根节点的特点,并且不允许键值重复。文章给出了插入、删除和搜索等方法的具体实现。哈希表则通过哈希函数将键名映射为数组下标,实现快速查找,其插入、删除和查找操作时间复杂度理想情况下为O(1)。文中还讨论了哈希函数的设计原则、哈希冲突的解决方法及哈希表的实现细节。
520 8
【数据结构】哈希表&二叉搜索树详解
|
传感器 数据可视化 安全
【虚拟现实】二、主要的AR/VR硬件设备
【虚拟现实】二、主要的AR/VR硬件设备
887 3
|
人工智能 数据可视化 前端开发
自学软硬件工程师776天精简版github项目同步推送步骤
注意 这篇文章不是水内容的,虽然我之前也写过 github推送同步的内容。
|
移动开发 编解码 缓存
基于 H5 Canvas "指纹识别" 技术 【浏览器指纹 VS Canvas指纹】
基于 H5 Canvas "指纹识别" 技术 【浏览器指纹 VS Canvas指纹】
1595 0
基于 H5 Canvas "指纹识别" 技术 【浏览器指纹 VS Canvas指纹】
【洛谷 P1443】马的遍历 题解(广度优先搜索)
该问题是一个棋盘上的马的最短路径问题。给定一个$n\times m$的棋盘和起点$(x, y)$,需要计算马到达棋盘上每个位置的最短步数。输入包含$n, m, x, y$,输出是一个矩阵,表示各位置的步数或未可达的$-1$。使用广度优先搜索(BFS)策略,从起点开始遍历,直到访问完所有可达位置。代码中定义了太阳数组表示马的移动方向,并通过队列实现BFS。最后输出格式要求每个数字左对齐且域宽为5。
504 0
|
小程序 前端开发
uniapp+node.js(express框架)获取微信小程序的openid
uniapp+node.js(express框架)获取微信小程序的openid
617 0