#include<bits/stdc++.h> using namespace std; int n,b,a,k[201],step1[201],ans=INT_MAX;//n,b,a,k, step1是到这一层最少步数 ans是到这b层最少步数 int tx;//tx是电梯可以到的层数 void dfs(int x,int step){//x是当前层数 step是当前步数 if(x==a) { ans=min(ans,step);// 最少步数 return; } tx=x+k[x];//向上 if(tx>0&&tx<=n&&(step<step1[tx]||step1[tx]==0)){//tx是否在舞台上 是否是最少步数 //cout<<endl; dfs(tx,step+1); } tx=x-k[x];//向下 if(tx>0&&tx<=n&&(step<step1[tx]||step1[tx]==0)){//tx是否在舞台上 是否是最少步数 //cout<<endl; dfs(tx,step+1); } } int main(){ cin>>n>>b>>a; for(int i=1;i<=n;i++) { cin>>k[i]; } dfs(b,0);//从b层开始 第0步 if(ans!=0) cout<<ans; else cout<<"-1";//不可到达 return 0; } /************************************************************** Problem: 1819 User: wuyunfeng Language: C++ Result: Memory Limit Exceed ****************************************************************/