Cod sursa(job #2467543)

Utilizator geniucosOncescu Costin geniucos Data 4 octombrie 2019 16:43:59
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.13 kb
#include<bits/stdc++.h>

using namespace std;

class Graph {
public:
    vector < vector < int > > v;
    void readGraph (int N, int M, bool isDigraph = 0) {
        v.resize (N);
        while (M --) {
            int x, y;
            scanf ("%d %d", &x, &y);
            x --, y --;
            v[x].push_back (y);
            if (!isDigraph)
                v[y].push_back (x);
        }
    }
    int size () {
        return v.size ();
    }
}g;

vector < int > bfs (Graph &g, int source) {
    vector < int > ans (g.size (), -1);
    queue < int > cc;
    cc.push (source), ans[source] = 0;
    while (!cc.empty ()) {
        int node = cc.front ();
        cc.pop ();
        for (auto it : g.v[node])
            if (ans[it] == -1)
                ans[it] = ans[node] + 1,
                cc.push (it);
    }
    return ans;
}

int main () {
    freopen ("bfs.in", "r", stdin);
    freopen ("bfs.out", "w", stdout);

    int N, M, S;
    scanf ("%d %d %d", &N, &M, &S), S --;
    g.readGraph (N, M, 1);
    auto ans = bfs (g, S);
    for (auto it : ans)
        printf ("%d ", it);
    printf ("\n");
}