权值均为1的广搜

题目:
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;
}
posted @ 2023-02-05 21:59  MITE's_BKY  阅读(14)  评论(0)    收藏  举报