Cod sursa(job #2394436)

Utilizator alex12_roGuster Alexandru alex12_ro Data 1 aprilie 2019 16:59:28
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <iostream>
#include <fstream>



using namespace std;

ifstream f("bfs.in");

ofstream g("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;

    f >> n >> m >> x0;

    for(int i = 1; i <= m; ++i)

    {

        int x, y;

        f >> x >> y;

        adauga(x, y);

    }



    bfs(x0);

    for(int i = 1; i <= n; ++i)

        g << 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];

            }

        }

    }

}