1360:奇怪的电梯(lift)

简介: 1360:奇怪的电梯(lift)

时间限制: 1000 ms         内存限制: 65536 KB

【题目描述】

大楼的每一层楼都可以停电梯,而且第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 n,a,b,top,tail;
4. int key[205];//记录按键顺序
5. bool vis[205];//标记去过的楼层
6. struct node{
7.  int x,s;//x记录楼层   s记录到达该楼层的最少按键次数 
8. } que[205];
9. void lift(int tx,int ts){
10.   if(tx>=1&&tx<=200&& !vis[tx]){
11.     vis[tx]=1;
12.     que[tail].x=tx;
13.     que[tail].s=ts+1;
14.     tail++;
15.   }
16. }
17. int main(int argc, char *argv[])
18. {
19.   cin>>n>>a>>b;
20.   for(int i=1;i<=n;i++) cin>>key[i];
21.   top=tail=1;//初始化头尾指针 
22.   que[tail].x=a;//初始化队首 
23.   que[tail].s=0; 
24.   tail++;
25.   while(tail>top){
26.     int tx=que[top].x;
27.     int ts=que[top].s;
28.     if(tx==b){
29.       cout<<ts<<endl;
30.       return 0;
31.     }
32.     lift(tx+key[tx],ts);//上楼 
33.     lift(tx-key[tx],ts);//下楼 
34.     top++;
35.   }
36.   cout<<"-1"<<endl;
37.   return 0;
38. }


相关文章
|
1月前
【每日一题Day313】LC2511最多可以摧毁的敌人城堡数目 | 模拟
【每日一题Day313】LC2511最多可以摧毁的敌人城堡数目 | 模拟
28 0
|
9月前
leetcode 1921. 消灭怪物的最大数量(每日一题)
leetcode 1921. 消灭怪物的最大数量(每日一题)
60 0
|
9月前
|
算法
小车PID算法跑直线
小车PID算法跑直线
76 0
|
11月前
|
算法
费解的开关/翻硬币
费解的开关/翻硬币
|
11月前
|
人工智能 Python
PONG - 100行代码写一个弹球游戏
游戏引擎用的是 Python 的一个游戏库:pgzero。它是对 pygame 的一个封装,让你不需要写多余的套路代码,只要配置游戏的内容逻辑即可。
洛谷P1135 奇怪的电梯——广搜
洛谷P1135 奇怪的电梯——广搜
77 0
|
索引
消除游戏中宝石下落的原理和实现
在消除游戏中,发生消除之后,会留下空白位置。此时,如果上方有其它的宝石,那这些宝石就会下落填充空白位置。今天我们就来了解一下宝石下落的方法以及实现。
136 0
福利来了:vaw-layouts,来不及解释了,赶紧上车
继vue-admin-work开源框架开发完之后,请多小伙伴问我,要怎么样快速搭建公司的后台管理系统。目前的解决方案是在 vue-admin-work的基础上进行删除无用的代码或者修改自己的需求。当了解了这一需求之后,我们想了一下也确实不方便,所以为了解决这一痛点 vaw-layouts项目就正式诞生了。
福利来了:vaw-layouts,来不及解释了,赶紧上车
PTA 1082 射击比赛 (20 分)
本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军
72 0
PAT甲级 1008. Elevator (20分)
PAT甲级 1008. Elevator (20分)
64 0