洛谷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;
}
目录
相关文章
|
4月前
leetcode-913:猫和老鼠
leetcode-913:猫和老鼠
74 1
|
3月前
|
人工智能 程序员 定位技术
老程序员分享:NOIP2016天天爱跑步(树上差分)
老程序员分享:NOIP2016天天爱跑步(树上差分)
18 0
|
3月前
|
存储 物联网
【洛谷 P1135】奇怪的电梯 题解(广度优先搜索)
这是一个关于奇怪电梯的编程问题摘要: - 电梯在每层停,且每层有特定数字 $K_i$ 决定上/下按钮的功能。 - 目标是从 $A$ 楼到 $B$ 楼,求最少按键次数,若无法到达则输出 `-1`。 - 输入包括 $N$(楼层数)、$A$(起点)和 $B$(终点),以及每层的 $K_i$ 数字。 - 使用广度优先搜索(BFS)解决,通过队列存储访问过的楼层,避免重复并计算步数。 - 当到达目标楼层时返回步数,队列空时返回 `-1`。
25 0
|
4月前
【错题集-编程题】过河卒(动态规划-路径问题)
【错题集-编程题】过河卒(动态规划-路径问题)
|
4月前
代码随想录Day29 贪心04 LeetCode T860 柠檬水找零 T406 根据身高重建队列 T452 用最少得箭引爆气球
代码随想录Day29 贪心04 LeetCode T860 柠檬水找零 T406 根据身高重建队列 T452 用最少得箭引爆气球
36 0
|
4月前
|
容器
每日一题——接雨水(单调栈)
每日一题——接雨水(单调栈)
【每日一道智力题】之如何最快的找到最轻的砝码
【每日一道智力题】之如何最快的找到最轻的砝码
173 0
|
机器学习/深度学习
带你轻松拿捏N皇后问题
要求任何两个皇后不同行、不同列,也不在同一 条斜线上
129 0
带你轻松拿捏N皇后问题
|
算法 JavaScript 前端开发
日拱算法:解两道“杨辉三角”题
什么是“杨辉三角”,想必大家并不陌生~~ 在「杨辉三角」中,每个数是它左上方和右上方的数的和。
代码随想录刷题|LeetCode 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
代码随想录刷题|LeetCode 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球
代码随想录刷题|LeetCode 860.柠檬水找零 406.根据身高重建队列 452. 用最少数量的箭引爆气球