Cod sursa(job #1572499)

Utilizator razvan242Zoltan Razvan-Daniel razvan242 Data 18 ianuarie 2016 22:38:34
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#include <vector>
#include <queue>
#include <cstring>

using namespace std;

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

const int NMAX = 100001;

vector<int> v[NMAX];
int n, m, source;
queue<int> Q;
bool viz[NMAX];
int dist[NMAX];

void bfs(int source) {
    memset(dist, -1, sizeof dist);
    dist[source] = 0;
    viz[source] = 1;
    Q.push(source);
    int father, son;
    while (Q.size()) {
        father = Q.front();
        Q.pop();
        for (const int& x: v[father]) {
            if (viz[x])
                continue;
            dist[x] = dist[father] + 1;
            viz[x] = 1;
            Q.push(x);
        }
    }
}

int main() {
    fin >> n >> m >> source;
    for (int i = 1, x, y; i <= m; ++i) {
        fin >> x >> y;
        v[x].push_back(y);
    }
    bfs(source);
    for (int i = 1; i <= n; ++i)
        fout << dist[i] << ' ';
}