Cod sursa(job #2786854)

Utilizator raduandreiRadu Andrei raduandrei Data 21 octombrie 2021 19:23:15
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>

using namespace std;

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

vector <int> v[100005];
int s,y,m,n,x;
void citire(vector<int> v[100005], int& n, int& m){
    in >> n >> m >> s;
    for(int i = 1; i <= m; ++i){
        in >> x >> y;
        v[x].push_back(y);
        //v[y].push_back(x);
    }

}

void afisare(vector<int> v[100005]){

    for(int i = 1; i <= n; ++i)
    {   cout << "Vecinii lui " << i << " sunt: ";
        for(auto x:v[i]){
            cout << x << " ";
        }
        cout << endl;}
}

int viz[100005];
void dfs(int i){
    viz[i] = 1;
    cout << i << " ";
    for(auto x: v[i]){
        if(!viz[x]){
            viz[x] = 1;
            dfs(x);
        }
    }
}
int d[100005];

void bfs(int x){
    queue <int> c;
    c.push(x);
    viz[x] = 1;
    for(int i = 1; i <= n; ++i)
        d[i] = -1;
    d[x] = 0;
    while(c.size()){
        for(auto val : v[c.front()])
            if(viz[val] == 0 ){
                d[val] = d[c.front()] + 1;
                viz[val] = 1;
                c.push(val);
            }
        c.pop();
    }
}

int main() {

    citire(v,n,m);

   // afisare(v);

   // dfs(1);
    bfs(s);

    for(int i = 1; i <= n; ++i)
        out << d[i] << " ";
    return 0;
}