Cod sursa(job #1163416)

Utilizator SRaduRadu Szasz SRadu Data 1 aprilie 2014 12:49:55
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.88 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

const int MAX = 100050;

int N, M, S;
int D[MAX];
vector<int> G[MAX];
queue<int> Q;

void citire() {
    ifstream in("bfs.in");
    in >> N >> M >> S;
    for(int i = 1, A, B; i <= M; i++) {
        in >> A >> B;
        G[A].push_back(B);
    } in.close();
}

void solve(int start) {
    for(int i = 1; i <= N; i++)
        D[i] = -1;
    D[start] = 0;
    Q.push(start);
    while(!Q.empty()) {
        int nod = Q.front(); Q.pop();
        for(size_t i = 0; i < G[nod].size(); i++) {
            int dest = G[nod][i];
            if(D[dest] == -1) {
                D[dest] = D[nod] + 1;
                Q.push(dest);
            }
        }
    }
}

void afisare() {
    ofstream out("bfs.out");
    for(int i = 1; i <= N; i++)
        out << D[i] << " ";
}

int main() {
    citire();
    solve(S);
    afisare();
}