题意:每一层电梯都有一个数x,意思是,在当前层只能上x层或者下x层,问最少几次到达要去的楼层
思路:利用广搜bfs进行搜索,利用数组s存可以上下几层,book标记,防止超时,需要特判的是,
要去和要到的地方是否一致,一致的话就是0
/*
********
************
####....#.
#..###.....##....
###.......###### ### ###
........... #...# #...#
##*####### #.#.# #.#.#
####*******###### #.#.# #.#.#
...#***.****.*###.... #...# #...#
....**********##..... ### ###
....**** *****....
#### ####
###### ######
###########################################################
#...#......#.##...#......#.##...#......#.##---------------#
###########################################---------------#
#..#....#....##..#....#....##..#....#....##################
########################################## #----------#
#.....#......##.....#......##.....#......# #----------#
########################################## #----------#
#.#..#....#..##.#..#....#..##.#..#....#..# #----------#
########################################## ############
########################################## ############
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<queue>
#include<stack>
#define x first
#define y second
using namespace std;
typedef long long ll;
const int N=1e6+10;
struct node {
int x;
int num;
};
int main() {
int n;
while(~scanf("%d",&n)) {
if(!n)break;
int a,b;
scanf("%d%d",&a,&b);
int s[205];
int book[205];
memset(book,0,sizeof book);
for(int i=1; i<=n; i++)scanf("%d",&s[i]);
node start,next,pre;
queue<node>que;
start.x=a;
start.num=0;
que.push(start);
book[a]=1;
int res=0;
int f=0;
while(!que.empty()) {
pre=que.front();
que.pop();
for(int i=0; i<=1; i++) {
if(i==0) next.x=pre.x+s[pre.x];
else next.x=pre.x-s[pre.x];
if(next.x<1||next.x>n||book[next.x]==1)continue;
book[next.x]=1;
if(next.x==b) {
f=1;
res=pre.num+1;
break;
}
next.num=pre.num+1;
que.push(next);
}
if(f)break;
}
if(a==b)cout<<0<<endl;
else if(res)cout<<res<<endl;
else cout<<-1<<endl;
}
return 0;
}