没啥特殊的,记住队列里存的是什么就行,直接上代码
#include <iostream>
#include <cstdio>
#include <queue>
#include <cstring>
#define MAXN 205
using namespace std;
queue <int> q;
int n, a, b;
int k[MAXN], mark[MAXN], ans[MAXN];
int main()
{
scanf("%d%d%d", &n, &a, &b);
for(int i = 1; i <= n; i ++) scanf("%d", &k[i]);
memset(ans, -1, sizeof(mark));
q.push(a);
mark[a] = 1;
ans[a] = 0;
while(!q.empty())
{
int now = q.front();
int tem;
q.pop();
if(now == b) break;
for(int i = -1; i <= 1; i += 2)
{
tem = now + i * k[now];
//printf("when now is %d, tem is %d\n", now, tem);
if(tem >= 1 && tem <= n && mark[tem] == 0)
{
//printf("tem is %d\n", tem);
q.push(tem);
mark[tem] = 1;
ans[tem] = ans[now] + 1;
}
}
}
printf("%d\n", ans[b]);
return 0;
}