不知道怎么优化啊,求大佬帮忙,只有三十分
#include<iostream>
using namespace std;
int st,fi,a[210],n,ans=1000;
void dfs(int s,int num){
//达到终点,记录此时的步骤num
if(s==fi){
ans=min(ans,num);
return ;
}
if(num>=n) return ;
//向上走
if(s+a[s]<=n) dfs(s+a[s],num+1);
//向下走
if(s-a[s]>=1) dfs(s-a[s],num+1);
}
int main(){
//st代表起点,fi代表终点
scanf("%d%d%d",&n,&st,&fi);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
dfs(st,0);
if(ans!=1000) printf("%d",ans);
else printf("-1");
return 0;
}