#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int q[500],vis[500];
int n,Start,End;
struct pos{
int level;
int steps;
};
void bfs(){
pos cur,nex;
cur.level=Start;
cur.steps=0;
queue<pos>qu;
qu.push(cur);
vis[Start]=1;
while(!qu.empty()){
cur=qu.front();
qu.pop();
if(cur.level==End){
printf("%d\n",cur.steps);
return;
}
// 正向跳跃
nex.level=cur.level+q[cur.level];
nex.steps=cur.steps+1;
if(nex.steps<=n && vis[nex.level]==0){
vis[nex.level]=1;
qu.push(nex);
}
// 反向跳跃
nex.level=cur.level-q[cur.level];
nex.steps=cur.steps+1;
if(nex.steps>=1 && vis[nex.level]==0){
vis[nex.level]=1;
qu.push(nex);
}
}
printf("-1\n");
return;
}
int main(){
cin>>n>>Start>>End;
memset(vis, 0, sizeof(vis)); // 初始化所有位置为未访问
for(int i=1;i<=n;i++){
cin>>q[i];
}
bfs();
return 0;
}
就是有个点RE了,实在不知道为啥,求助!