using namespace std;
int n,a,b;
int k[202];
bool visit[202]={0};//标记数组
int fuhao[3]={0,1,-1};
int flag,sum=0;
int ceng=1,jie=0,xia=0;//当前层节点数量,当前层遍历到第几个节点
queue<int> q;
void bfs()
{
q.push(a);//当前楼层进入队列
visit[a]=1;
while(!q.empty()){
int c=q.front();//取出队列第一个元素
if(c!=b) q.pop();
else {
flag=1;//输出次数
return;
}
for(int i=1;i<=2;i++)
{
int d=c+fuhao[i]*k[c];
if(d>=1 && d<=n && !visit[d])
{
visit[d]=1;
q.push(d);
xia++;//记录下一层节点个数
}
}
jie++; //遍历的节点数加一,直到该层遍历完,层数加一
if(jie==ceng)
{
ceng=xia;
xia=0;
jie=0;
sum++;
}
}
return;
}
int main(){
cin>>n>>a>>b;
for(int i=1;i<=n;i++){
cin>>k[i];
}
flag=0;
sum=0;
bfs();
if(flag==0){
cout<<-1;
}
else cout<<sum;
return 0;
}
0 回复
0 转发
0 喜欢
7 阅读



