Cod sursa(job #2148147)

Utilizator UnseenMarksmanDavid Catalin UnseenMarksman Data 1 martie 2018 15:54:08
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.26 kb
#include <cstdio>
#include <vector>
#define N 100002
#define M 1000002

using namespace std;

int n, m, nod, k, v[2][M], start[N], d[N];

void bfs(int x)
{
    bool ok[N]={0};
    vector<int> A;
    A.push_back(x);
    ok[x]=1;
    while(A.size())
    {
        int w=start[A[0]];
        while(w)
        {
            if(!ok[v[0][w]])
            {
                A.push_back(v[0][w]);
                ok[v[0][w]]=1;
                d[v[0][w]]=d[A[0]]+1;
            }
            w=v[1][w];
        }
        A.erase(A.begin());
    }
    for(int i=1; i<nod; i++)
    {
        if(d[i])
        {
            printf("%d ", d[i]);
        }
        else
        {
            printf("-1 ");
        }
    }
    printf("0 ");
    for(int i=nod+1; i<=n; i++)
    {
        if(d[i])
        {
            printf("%d ", d[i]);
        }
        else
        {
            printf("-1 ");
        }
    }
}

int main()
{
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);

    int i,j;
    scanf("%d%d%d", &n, &m, &nod);
    while(m)
    {
        scanf("%d%d", &i, &j);
        k++;
        v[0][k]=j;
        v[1][k]=start[i];
        start[i]=k;
        m--;
    }
    bfs(nod);
    return 0;
}