Cod sursa(job #2394406)

Utilizator dragostanTantaru Dragos Constantin dragostan Data 1 aprilie 2019 16:48:49
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>

using namespace std;
ifstream cin("bfs.in");
ofstream cout("bfs.out");

const int NMAX = 100001, MMAX = 1000001;

int lst[NMAX], vf[MMAX], urm[MMAX], q[NMAX], d[NMAX];
int n, m, nr;

void adauga(int, int);
void bfs(int);
int main()
{
    int x0;
    cin >> n >> m >> x0;
    for(int i = 1; i <= m; ++i)
    {
        int x, y;
        cin >> x >> y;
        adauga(x, y);
    }

    bfs(x0);
    for(int i = 1; i <= n; ++i)
        cout << d[i] << ' ';
    return 0;
}

void adauga(int x, int y)
{
    ++nr;
    vf[nr] = y;
    urm[nr] = lst[x];
    lst[x] = nr;
}

void bfs(int start)
{
    for(int i = 1; i <= n; ++i)
        d[i] = -1;
    int st = 0, dr = -1;
    q[++dr] = start;
    d[start] = 0;
    while(st <= dr)
    {
        int x = q[st++];
        for(int p = lst[x]; p; p = urm[p])
        {
            int y = vf[p];
            if(d[y] == -1)
            {
                q[++dr] = y;
                d[y] = 1 + d[x];
            }
        }
    }
}