#include <stdio.h>
#include <string.h>
int lift[201];
int q[201];
int f[201];
int n, a, b;
int flag;
int count;
void bfs()
{
int head, tail;
// 初始化队列
head = 0;
tail = 3;
q[1] = a;
q[2] = -1;
f[a] = 1;
count = 0;
flag = 0;
int p;
while (head < tail)
{
head++;
if (b == q[head])
{
flag = 1;
return;
}
if (-1 == q[head])
{
if (head == tail - 1)
return;
q[tail++] = -1;
count++;
continue;
}
f[q[head]] = 1;
p = q[head] + lift[q[head]];
if (!f[p] && p <= n)
q[tail++] = p;
p = q[head] - lift[q[head]];
if (!f[p] && p > 0)
q[tail++] = p;
}
}
int main()
{
int i;
while (1)
{
scanf("%d", &n);
if (!n) break;
scanf("%d %d", &a, &b);
for (i = 1; i <= n; i++)
scanf("%d", &lift[i]);
memset(f, 0, sizeof(f));
bfs();
if (flag) printf("%d\n", count);
else printf("-1\n");
}
return 0;
}
hduoj_1548(bfs)
最新推荐文章于 2019-03-13 16:06:05 发布