http://tjuacm.chaosheng.top/problem.php?id=1285
https://www.luogu.com.cn/problem/P1135

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>

using namespace std;
const int N = 210; 

int n, a, b;
int k[N];
bool visit[N];
int dx[4] = {0,0,-1,1};
int dy[4] = {1,-1,0,0}; 

struct pos{
    int x;
    int cnt;
};

int bfs(int x){
    memset(visit, false, sizeof(visit));
    queue<pos> q;
    pos f, v;
    f.x = x;
    f.cnt = 0;
    visit[f.x] = true;
    q.push(f);

    while(!q.empty()){
        f = q.front();
        q.pop();

        if(f.x == b) return f.cnt;

        for(int i = 0; i < 2; i++){
            if(i == 0){
                v.x = f.x + k[f.x-1];
            }else{
                v.x = f.x - k[f.x-1];
            }

            if(v.x > 0 && v.x <= n && !visit[v.x]) {
                visit[v.x] = true;
                v.cnt = f.cnt + 1;
                q.push(v);
            }
        }            
    }
    return -1;
}

int main(){
    cin >> n >> a >> b;

    for(int i = 0; i < n; i++){
        cin >> k[i];
    }
    int cnt = bfs(a);
    printf("%d\n", cnt);
    return 0;
}