zoukankan      html  css  js  c++  java
  • 电梯

    Problem D: 电梯

    Time Limit: 1 Sec  Memory Limit: 128 MB
    Submit: 124  Solved: 39
    [Submit][Status][Web Board]

    Description

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

    Input

    每组数据,共有二行,第一行为三个用空格隔开的正整数,表示N,A,B(1≤N≤200, 1≤A,B≤N)
    第二行为N个用空格隔开的正整数,表示Ki。

    Output

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

    Sample Input

    5 1 5
    3 3 1 2 5

    Sample Output

    3

    HINT

     1 #include <iostream>
     2 using namespace std;
     3 int head=1,tail=1,q[200];
     4 int cg[200][200];
     5 int step[200];
     6 int book[200];
     7 int main(){
     8         int k[200];
     9     int n,a,b;
    10     cin>>n>>a>>b;
    11     for(int i=1;i<=n;i++)
    12     {
    13         cin>>k[i];
    14     }
    15     for(int i=1;i<=n;i++)
    16     {
    17         if(i-k[i]>0)
    18         {
    19             cg[i][i-k[i]]=1;
    20         }
    21         if(i+k[i]<=n)
    22         {
    23             cg[i][i+k[i]]=1;
    24         }
    25     }
    26     step[a]=0;
    27     q[1]=a;
    28     if(a==b)
    29     {
    30         cout<<0<<endl;
    31         return 0;
    32     }
    33     do
    34     {
    35         for(int i=1;i<=n;i++)
    36         {
    37             if(cg[q[head]][i]==1)
    38             {
    39                 if(book[i]==0)
    40                 {
    41                     book[i]=1;
    42                     tail++;
    43                     q[tail]=i;
    44                     step[i]=step[q[head]]+1;
    45                     if(q[tail]==b)
    46                     {
    47                         cout<<step[b];
    48                         return 0;
    49                     }
    50                 } 
    51             }
    52         }
    53         head++;
    54     }while(head<=tail);
    55     cout<<-1<<endl;
    56     return 0;
    57 }
    电梯
  • 相关阅读:
    js基础知识(pomelo阅读)
    nohup启动命令(转)
    JS基础知识(数组)
    JS基础知识(作用域/垃圾管理)
    JS基础知识(基本类型 引用类型)
    html5实现饼图和线图-我们到底能走多远系列(34)
    RK3288 device descriptor read/64, error -32
    RK3288 双屏异显,两屏默认方向不一致
    Android 查看Android版本的方法
    adb error: device offline
  • 原文地址:https://www.cnblogs.com/LHR-HY/p/6817576.html
Copyright © 2011-2022 走看看