zoukankan      html  css  js  c++  java
  • 1078. 奇怪的电梯

    题目描述

    大楼的每一层楼都可以停电梯,而且第i层楼(1<=i<=N)上有一个数字Ki(0<=Ki<=N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。例如:3 3 1 2 5代表了Ki(K1=3,K2=3,……),从一楼开始。在一楼,按“上”可以到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
     

    数据范围限制

     1 #include<iostream>
     2 using namespace std;
     3 int lc[1000001];
     4 int tot=10001;
     5 int n;
     6 int beginn;
     7 int endn;
     8 int vis[1001];
     9 void dfs(int now,int step)
    10 {
    11     if(step>tot)
    12     return;
    13     if(now==endn)
    14     {
    15         if(step<tot)
    16         tot=step;
    17         return;
    18     }
    19     else
    20     {
    21         vis[now]=1;
    22         if(now-lc[now]>0&&vis[now-lc[now]]==0)
    23         {
    24             dfs(now-lc[now],step+1);
    25         }
    26         if(now+lc[now]<=n&&vis[now+lc[now]]==0)
    27         {
    28             dfs(now+lc[now],step+1);
    29         }
    30         vis[now]=0;
    31     }
    32 }
    33 int main()
    34 {
    35     
    36     cin>>n>>beginn>>endn;
    37     for(int i=1;i<=n;i++)
    38     {
    39         cin>>lc[i];
    40     }
    41     dfs(beginn,0);
    42     if(tot!=10001)
    43     cout<<tot;
    44     else 
    45     {
    46         cout<<-1;
    47     }
    48     return 0;
    49 }
  • 相关阅读:
    C# 编码解码
    asp.net跨域问题
    C# crc16modbus
    c# 日志生成
    C# 对newtonsoft.json对象进行ascii排序
    C# 字节转结构体、结构体转字节
    按ascill排序参数
    C# Rsa加密(私钥加密、公钥解密、密钥格式转换、支持超大长度分段加密)
    Interview
    Leetcode
  • 原文地址:https://www.cnblogs.com/lyqlyq/p/6647702.html
Copyright © 2011-2022 走看看