题目:
https://www.luogu.com.cn/problem/P1135
#include <stdio.h>
#include <math.h>
int q[201]; //用队列维护,经常的事
int h, t; //tail ,hair
int s[201]; //到i的距离
int k[201]; //存路径
void updata(int u, int v)
{
if (s[u] + 1 < s[v])
{
s[v] = s[u] + 1;
q[t++] = v;
}
}
int main()
{
int n, a, b;
scanf("%d%d%d", &n, &a, &b);
for (int i = 1; i <= n; i++)
{
scanf("%d", &k[i]);
s[i] = 999999;
}
s[a] = 0;
q[t++] = a;
while (h != t)
{
int u = q[h++];
if (u + k[u] <= n)
updata(u, u + k[u]);
if (u - k[u] > 0)
updata(u, u - k[u]);
}
printf("%d\n", s[b] == 999999 ? -1 : s[b]);
system("pause");
return 0;
}