刚学bfs
#include <bits/stdc++.h>
#define N 205
using namespace std;
int l[N][N], k[N];
int n, a, b;
struct node{
int val, step;
};
int v[N];
queue<node> q;
int bfs(){
if(a==b){
return 0;
}
v[a]=1;
while(!q.empty()){
node x=q.front();
for(int i=1;i<=n;i++){
if(l[x.val][i]){
q.push({i, x.step+1});
v[i]=1;
if(i==b){
return x.step+1;
}
}
}
q.pop();
}
return -1;
}
int main(){
cin>>n>>a>>b;
for(int i=1;i<=n;i++){
cin>>k[i];
if(i+k[i]<=n) l[i][i+k[i]]=1;
if(i-k[i]>0) l[i][i-k[i]]=1;
}
q.push({a, 0});
cout<<bfs();
return 0;
}