Cod sursa(job #1413793)

Utilizator PureGPureGains PureG Data 2 aprilie 2015 08:56:22
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
/*
    Keep It Simple!
*/

#include <vector>
#include <fstream>
#include <queue>
#include <cstring>

using namespace std;

const int kMaxN = 100005;

int N, M, S;
vector<int>  G[kMaxN];
queue<int> que;
int seen[kMaxN];

void Solve() {
    ifstream fin("bfs.in");
        fin >> N >> M >> S;
        for (int i(0); i <= M; ++i) {
            int x, y;
            fin >> x >> y;
            G[x].push_back(y);
        }
    fin.close();

    memset(seen,0x3f,sizeof seen);
    que.push(S);
    seen[S] = 0;
    while (!que.empty()) {
        int node = que.front();
        que.pop();
        for (auto it : G[node]) {
            if (seen[it] > seen[node] + 1) {
                seen[it] = seen[node] + 1;
                que.push(it);
            }
        }
    }

    ofstream fout("bfs.out");
    for (int i(1); i <= N; ++i)
        fout << (seen[i] == 0x3f3f3f3f ? -1:seen[i]) << " ";
    fout.close();
}

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