我用简单的BFS写了一遍,样例过了,却只有30分
#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,c,b;
int a[10086];
struct node
{
int fl,ans;
};
queue<node>q;
int main()
{
cin>>n>>c>>b;
for(int i=1;i<=n;i++)
cin>>a[i];
q.push((node){c,0});
while(!q.empty())
{
node f=q.front();
q.pop();
if(f.fl==b)
{
cout<<f.ans;
return 0;
}
for(int i=1;i<=1;i++)
{
if(f.fl+a[f.fl]>n)
break;
q.push((node){f.fl+a[f.fl],f.ans+1});
}
for(int i=1;i<=1;i++)
{
if(f.fl-a[f.fl]<1)
break;
q.push((node{f.fla[f.fl],f.ans+1});
}
}
cout<<-1;
return 0;
}