代码如下:
#include<iostream>
#include<cstdlib>
using namespace std;
const int N=201;
int k[N],w[N][N];
int n,a,b,h,t;
int cnt=0;
bool f[N];
struct q{
int num;
int s;
}que[N];
int main(){
cin>>n>>a>>b;
f[a]=1;
if(a==b){
cout<<0<<endl;
return 0;
}
for(int i=1;i<=n;i++){
cin>>k[i];
if(i+k[i]<=n) w[i][i+k[i]]=1;
if(i-k[i]>0) w[i][i-k[i]]=1; //用w判断是否可以达到
}
for(int i=1;i<=n;i++){
if(w[a][i]==1){
t++;
que[t].num=i;
que[t].s=1;
f[i]=1; //如果a可以到i,则i入队
while(h!=t){
h++;
for(int j=1;j<=n;j++){
if(w[que[h].num][j]==1&&f[j]==0){
t++;
que[t].num=j;
que[t].s=que[h].s+1;
f[que[h].num]=1; //如果队首元素可以到j且j没得、被访问,则j入队并标记
}
if(que[t].num==b){
cout<<que[t].s<<endl;
return 0;
}
}
}
}
}
cout<<-1<<endl;
return 0;
}