奇怪的电梯大家好,我是3月份新人榜排名第三的 ༺Blog༒Hacker༻
支持我:点赞+收藏⭐️+留言
格言:༺永做优质༒programmer༻
【问题描述】
❄️大楼的每一层楼都可以停电梯,而且第 i i i层楼 ( 1 < = i < = N ) (1<=i<=N) (1<=i<=N)上有一个数字 K i ( 0 < = K i < = N ) K_i(0<=K_i<=N) Ki(0<=Ki<=N)。电梯只有四个按钮:开,关,上,下。上下的层数等于当前楼层上的那个数字。当然,如果不能满足要求,相应的按钮就会失灵。
❄️例如:$3 3 1 2 5
代 表 了 代表了 代表了K_i(K_1=3,K_2=3,……)$,从一楼开始。在一楼,按“上”可以到 4 4 4楼,按“下”是不起作用的,因为没有 − 2 -2 −2楼。那么,从A楼到B楼至少要按几次按钮呢?
【输入格式】
❄️输入文件共有二行,第一行为三个用空格隔开的正整数,表示 N , A , B ( 1 ≤ N ≤ 200 , 1 ≤ A , B ≤ N ) N,A,B(1≤N≤200, 1≤A,B≤N) N,A,B(1≤N≤200,1≤A,B≤N),第二行为 N N N个用空格隔开的正整数,表示 K i K_i Ki。
【输出格式】
❄️输出文件仅一行,即最少按键次数,若无法到达,则输出 − 1 -1 −1。
【输入样例】
5 1 5 3 3 1 2 5
【输出样例】
3CODE
#include朋友们,点赞是我更新的动力,明天再见,拜拜!!!using namespace std; typedef struct{ int x; int y; }z; queue q; int n,a,b; int s[1000]; int t[1000]={0}; int main() { z e1,e2; int i; cin>>n>>a>>b; for(i=1;i<=n;++i) { cin>>s[i]; } e1.x=a; e1.y=0; q.push(e1); t[a]=1; while (!q.empty()) { e2=q.front(); q.pop(); if(e2.x==b) { break; } i=e2.x+s[e2.x]; if(i<=n && t[i]==0) { e1.x=i; e1.y=e2.y+1; q.push(e1); t[i]=1; } i=e2.x-s[e2.x]; if(i>=1 && t[i]==0){ e1.x=i; e1.y=e2.y+1; q.push(e1); t[i]=1; } } if(e2.x==b) { cout< cout<<-1; } return 0; }



