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. }


相关文章
|
4月前
|
人工智能 Rust 安全
DARPA计划“消灭”C语言代码
为了加速软件业向内存安全编程语言的过渡,美国国防高级研究计划局(DARPA)正在推动一个名为TRACTOR的人工智能代码转换工具,可自动将遗留C代码转换为Rust,以根治内存安全问题。TRACTOR是TRanslating All C TO Rust的缩写,即“将所有C语言代码转换为Rust语言”。
DARPA计划“消灭”C语言代码
|
算法
小车PID算法跑直线
小车PID算法跑直线
107 0
|
传感器
有刷无刷,永磁同步,步进,空心杯,统统拆开看看有什么不同
有刷无刷,永磁同步,步进,空心杯,统统拆开看看有什么不同
Leecode 999. 车的可用捕获量
Leecode 999. 车的可用捕获量
58 0
xprintlog:给print函数加点料
xprintlog:给print函数加点料
99 0
PTA 1082 射击比赛 (20 分)
本题目给出的射击比赛的规则非常简单,谁打的弹洞距离靶心最近,谁就是冠军
97 0
PTA——7-4 奇葩楼层 (15 分)
PTA——7-4 奇葩楼层 (15 分)
172 0
倍频程与钢琴调式的距离
单从倍频程和钢琴调式这两个名词看,距离确实有点远,一个偏科技一个偏娱乐。但是距离远不代表没有关系,下面就让我们给它们俩拉拉关系吧。
倍频程与钢琴调式的距离
|
程序员 Go
如何1秒钟让程序员抖腿?教你10个方法!
最近又继续搜搜罗不少好听的BGM(BackGround Music,都是电音,尤其是游戏背景音乐必备),希望大家喜欢!这些歌曲都可以在网易云中直接搜索获得。
1444 0