Cod sursa(job #2789823)

Utilizator Andreea__Zavoiu Andreea Andreea__ Data 28 octombrie 2021 00:15:16
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.16 kb
#include <iostream>
#include <fstream>
#include <queue>
// #define nMax 100000
using namespace std;

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

vector<int> LA[100001]; // lista de adiacenta sub forma unui array de vectori de inturi => lista de liste
int n, m, s, viz[100001];

void bfs(int start) {
    queue<int> Q;
    Q.push(start);
    viz[start]++; // in start adica in s voi avea 0

    while (!Q.empty()){
        int nodCurent = Q.front(); // primul la coada
        Q.pop();

        for (int vecin : LA[nodCurent])
        {
            if (viz[vecin] == -1) // daca inca e nevizitat (daca ar fi vizitat, nu ar mai fi -1 in el, ci mai mult)
            {
                viz[vecin] = 1 + viz[nodCurent]; // asa calculez distanta fata de start
                Q.push(vecin);
            }
        }
    }
}

int main()
{
    int x, y;
    fin >> n >> m >> s;

    for (int i=1; i<=n; i++) { viz[i] = -1; }

    for (int i=1; i<=m; i++){
        fin >> x >> y;
        LA[x].push_back(y); // x se leaga si cu y, printre alte noduri
    }

    bfs(s);

    for (int i=1; i<=n; i++){ // pentru fiecare nod
        fout << viz[i] << " ";
    }

    fout.close();
    return 0;
}