Cod sursa(job #2610089)

Utilizator dancu_mihai13Dancu Mihai dancu_mihai13 Data 4 mai 2020 13:28:19
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <bits/stdc++.h>

using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");

const int NMAX = 100005;
int dist[NMAX] = {0};
vector < vector <int> > adiacent;

void read(int &n, int &m, int &nod)
{
    fin >> n >> m >> nod; int x, y;
    adiacent.resize(n + 1);
    for(int i = 0; i < m; i++)
    {
        fin >> x >> y;
        adiacent[x].push_back(y);
    }
}

void BFS(int noduri, int nod)
{
    bool vizitat[NMAX] = {0};
    int coada[NMAX] = {0};
    int pr, ul;
    pr = ul = 1;
    coada[pr] = nod;
    vizitat[nod] = 1;
    for(int i = 1; i <= noduri; i++)
        dist[i] = -1;
    dist[nod] = 0;
    while(pr <= ul && ul < noduri)
    {
        int curent = coada[pr];
        for(unsigned int i = 0; i < adiacent[curent].size(); i++)
        {
            int vecin = adiacent[curent][i];
            if(!vizitat[vecin])
            {
                coada[++ul] = vecin;
                vizitat[vecin] = 1;
                dist[vecin] = dist[coada[pr]] + 1;
            }
        }
        pr++;
    }
}

void print(int noduri)
{
    for(int i = 1; i <= noduri; i++)
        fout << dist[i] << ' ';
}

int main()
{
    int noduri, muchii, nod;

    read(noduri, muchii, nod);
    BFS(noduri, nod);
    print(noduri);
    return 0;
}