43 lines
740 B
C++
43 lines
740 B
C++
#include <iostream>
|
|
using namespace std;
|
|
#include <cstdio>
|
|
#include <cstring>
|
|
#include <cmath>
|
|
int n,a,b,t;
|
|
int ans=0x7f;
|
|
int edge[201][201];
|
|
int f[201][201];
|
|
|
|
int main()
|
|
{
|
|
cin>>n>>a>>b;
|
|
memset(edge,0x7f/2,sizeof(edge));
|
|
memset(f,0x7f/2,sizeof(f));
|
|
for (int i=1; i<=n; i++)
|
|
{
|
|
f[i][i]=0;
|
|
cin>>t;
|
|
if (i+t<=n)
|
|
{
|
|
edge[i][i+t]=1;
|
|
f[i][i+t]=edge[i][i+t];
|
|
}
|
|
if (i-t>=1)
|
|
{
|
|
edge[i][i-t]=1;
|
|
f[i][i-t]=edge[i][i-t];
|
|
}
|
|
}
|
|
for (int k=1; k<=n; k++)
|
|
for (int i=1; i<=n; i++)
|
|
if (i!=k)
|
|
for (int j=1; j<=n; j++)
|
|
if (i!=j&&j!=k)
|
|
{
|
|
f[i][j]=min(f[i][j],f[i][k]+f[k][j]);
|
|
}
|
|
if (f[a][b]!=f[0][0]) cout<<f[a][b];
|
|
else cout<<-1;
|
|
}
|
|
|
|
|