```cpp
#include<bits/stdc++.h>
using namespace std;
int n,k[201],a,b,d[20001][2];
int df[3]={0,1,-1};
bool bz[201];
void bfs()
{
int head=0,tail=1;
d[1][0]=0;
d[1][1]=a;
while(head<tail)
{
head++;
for(int i=1;i<=2;i++)
{
int l=d[head][1]+(df[i]*k[d[head][1]]);
if(l>0 && l<=n && bz[l]==0)
{
bz[l]=1;
tail++;
d[tail][0]=d[head][0]+1;
d[tail][1]=l;
if(l==b)
{
cout<<d[tail][0];
exit(0);
}
}
}
}
cout<<"-1";
}
int main()
{
cin>>n>>a>>b;
for(int i=1;i<=n;i++)
{
cin>>k[i];
}
if(a==b)
{
cout<<'0';
exit(0);
}
bfs();
}
```````
by HEROBRINEH @ 2024-03-03 11:10:55
```cpp
#include<bits/stdc++.h>
using namespace std;
int N,A,B,k[210];
int ans=1e9,minn[210]/*到达此楼最少步数*/;
void dfs(int a,int b,int bushu){
if(a<1 || a>N)/*超出范围*/ return;
if(bushu>=minn[a])/*到过了*/ return;
if(bushu>=ans)/*次数超过*/ return;
if(a==b){
ans=bushu;
return;
}
minn[a]=bushu;
dfs(a+k[a],b,bushu+1);//↑
dfs(a-k[a],b,bushu+1);//↓
}
int main(){
cin>>N>>A>>B;
for(int i=1;i<=N;i++){
cin>>k[i];
minn[i]=1e9;
}
dfs(A,B,0);
cout<<(ans==1e9?-1:ans);
return 0;
}
```
by AC___ @ 2024-03-21 21:52:37