Cod sursa(job #2157149)

Utilizator whitewolfJon Snow whitewolf Data 9 martie 2018 12:25:21
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.95 kb
#include <bits/stdc++.h>

using namespace std;

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

const int nMax = 100001;
int n, s;
int dp[nMax];
vector <int> L[nMax];
queue <int> q;

void Read() {
    int m, i, x, y;
    fin >> n >> m >> s;
    for (i = 1; i <= m; i++) {
        fin >> x >> y;
        L[x].push_back(y);
    }
    fin.close();
}

void BFS(int nod) {
    for (int i = 1; i <= n; i++) dp[i] = nMax;
    dp[nod] = 0;
    q.push(nod);
    while (!q.empty()) {
        nod = q.front();
        q.pop();
        for (auto it : L[nod]) {
            if (dp[it] > dp[nod] + 1) {
                dp[it] = dp[nod] + 1;
                q.push(it);
            }
        }
    }
}

void Solve() {
    BFS(s);
    for (int i = 1; i <= n; i++) {
        if (dp[i] == nMax) dp[i] = -1;
        fout << dp[i] << " ";
    }
    fout << "\n";
    fout.close();
}

int main()
{
    Read();
    Solve();
    return 0;
}