洛谷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;
}
目录
相关文章
|
前端开发 应用服务中间件
SpringMVC 文件上传 消息 Required request part ‘file‘ is not present描述 由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者
SpringMVC 文件上传 消息 Required request part ‘file‘ is not present描述 由于被认为是客户端对错误(例如:畸形的请求语法、无效的请求信息帧或者
3210 0
|
存储 缓存 算法
【OSTEP】分页: 快速地址转换(TLB) | TLB命中处理 | ASID 与页共享 | TLB替换策略: LRU策略与随机策略 | Culler定律
【OSTEP】分页: 快速地址转换(TLB) | TLB命中处理 | ASID 与页共享 | TLB替换策略: LRU策略与随机策略 | Culler定律
508 0
|
1月前
|
JavaScript Java 关系型数据库
基于springboot的非遗传承宣传平台
本项目基于SpringBoot、Vue、MySQL等技术,构建非遗传承宣传平台,实现非遗资源的数字化存储与传播。通过图文、视频、互动社区等形式,打破时空限制,提升公众参与度,助力传统文化保护与传承。
|
安全 网络安全 数据安全/隐私保护
|
3月前
|
运维 Ubuntu 安全
Ubuntu 精通之路:12 个核心知识点从入门到高手
掌握这些知识点需要不断的学习和实践。建议在实际工作中多应用,将理论与实践相结合。遇到问题多查阅文档,多与社区交流。只有不断实践,不断积累,才能真正掌握 Ubuntu。
|
7月前
|
人工智能 数据可视化 前端开发
自学软硬件工程师776天精简版github项目同步推送步骤
注意 这篇文章不是水内容的,虽然我之前也写过 github推送同步的内容。
|
传感器 数据可视化 安全
【虚拟现实】二、主要的AR/VR硬件设备
【虚拟现实】二、主要的AR/VR硬件设备
600 3
|
机器学习/深度学习 人工智能 自然语言处理
【机器学习】机器学习、深度学习、强化学习和迁移学习简介、相互对比、区别与联系。
机器学习、深度学习、强化学习和迁移学习都是人工智能领域的子领域,它们之间有一定的联系和区别。下面分别对这四个概念进行解析,并给出相互对比、区别与联系以及应用场景案例分析。
998 1
|
传感器 机器人 Java
使用Java构建机器人应用
使用Java构建机器人应用
251 0
|
前端开发 Android开发
Android Path测量工具:PathMeasure
Android Path测量工具:PathMeasure
420 0