http://ybt.ssoier.cn:8088/problem_show.php?pid=1360
/*
1360:奇怪的电梯(lift)--AC
http://ybt.ssoier.cn:8088/problem_show.php?pid=1360
*/
#include <bits/stdc++.h>
using namespace std;
int que[300][2];
int num[210];
int main( void )
{
int n,a,b;
cin>>n>>a>>b;
int head,tail;
int tempx,tempy,nx;
bool flag[210];
memset(flag,false,sizeof(flag));
for(int i=1;i<=n;++i)
{
//每层的数字
cin>>num[i];
}
//从当前层到当前层
if( a == b )
{
cout<<0<<endl;
return 0;
}
head=0;
tail=1;
que[tail][0]=a;
que[tail][1]=0;//step
//flag表示已经走过
flag[a]=true;
while( head != tail)
{
//出队
++head;
tempx=que[head][0];
tempy=que[head][1];
for(int i=-1;i<=1;++i)
{
if( i != 0 )
{
nx=tempx+num[tempx]*i;
//nx>n 上溢
//nx<1 下溢
//flag[nx] 表示已经走过
if( nx>n || nx<1 || flag[nx] ) continue;
//break 跳出本层循环
//continue:跳出本次循环
if( nx == b )
{
cout<<tempy+1<<endl;
return 0;
}
//入队
++tail;
que[tail][0]=nx;
que[tail][1]=tempy+1;
//flag[nx] 标记为已经走过
flag[nx]=true;
}
}
}
cout<<-1<<endl;
return 0;
}