额...
这题不是裸的BFS吗
@[vandarkholme](/space/show?uid=64353)
我为了你打的!一遍AC !
```cpp
#pragma GCC optimize(3)
#include <iostream>
#include <algorithm>
#include <cstring>
#include <math.h>
#include <stdio.h>
#include <queue>
#include <vector>
#include <map>
#define fi first
#define se second
#define P pair<long long,long long>
#define DEBUG printf("fuck\n")
#define N 250
#define INF 0x3f3f3f3f
#define FOR(i,a,b) for(int i=a;i<=b;i++)
#define FOR_(i,a,b) for(int i=a;i>=b;i--)
using namespace std;
int n,a,b,st[N],vis[N];
queue<P> G;
inline int BFS()
{
vis[a]=1;
G.push(P(a,0));
while(!G.empty())
{
P now=G.front(); G.pop();
if(now.first==b) return now.second;
int loc=now.first;
if(!vis[loc+st[loc]]&&loc+st[loc]<=n&&loc+st[loc]>=1)
{
G.push(P(loc+st[loc],now.second+1));
vis[loc+st[loc]]=1;
}
if(!vis[loc-st[loc]]&&loc-st[loc]<=n&&loc-st[loc]>=1)
{
G.push(P(loc-st[loc],now.second+1));
vis[loc-st[loc]]=1;
}
}
return -1;
}
int main(int argc, char const *argv[])
{
scanf("%d%d%d",&n,&a,&b);
for(int i=1;i<=n;i++)
scanf("%d",&st[i]);
printf("%d\n",BFS());
return 0;
}
```
by Bartholomew @ 2017-11-26 22:18:15