Cod sursa(job #2798673)

Utilizator petrualbert01Gavrilescu Albert petrualbert01 Data 11 noiembrie 2021 18:14:48
Problema BFS - Parcurgere in latime Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.3 kb
#include <fstream>
#include <queue>
#include <vector>
#define N 100001

using namespace std;

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

vector<int> G[N];

int n,m,start;
int lg[N];

void Citire()
{
    int x, y, i;
    fin>>n>>m>>start;
    for(i=1;i<=m;i++)
    {
        fin>>x>>y;
        G[x].push_back(y);
    }

    fin.close();

}

void BFS(int x)
{
    queue <int> c; /// coada
    int nod, i;

    for(i=1;i<=n;i++)  /// initializez lungimea nodurilor cu -1 pentru acelea care nu vor fi vizitate niciodata
        lg[i]=-1;

    c.push(x); /// adaug nodul x in coada
    lg[x]=0;  /// distanta  e 0
    while(!c.empty())  /// cat timp coada nu e vida
    {
        nod=c.front(); /// preiau primul element din coada
        c.pop();   /// il elimin
        for(i=0; i < G[nod].size(); i++) /// parcurg varfurile
            if(lg[G[nod][i]] == -1) /// daca distanta e -1, adica nu a fost vizitat
            {
                c.push(G[nod][i]);  /// adaug in coada nodul vizitat
                lg[G[nod][i]] = lg[nod] + 1; /// cresc distanta cu 1
            }
    }
}

void Afisare()
{
    int i;
    for(i=1;i<=n;i++)
        fout<<lg[i]<<" ";

    fout.close();
}

int main()
{
    Citire();
    BFS(start);
    Afisare();

    return 0;
}