Cod sursa(job #1248446)

Utilizator gabrieligabrieli gabrieli Data 25 octombrie 2014 10:39:02
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include <algorithm>
#include <fstream>
#include <iterator>
#include <queue>
#include <vector>

using namespace std;

vector<vector<size_t>> G;

vector<int> bfs(const size_t source, const vector<vector<size_t>>& G) {
    vector<int> D(G.size(), -1);
    queue<size_t> Q;
    
    for(Q.push(source), D[source] = 0; !Q.empty(); Q.pop())       
        for (int v : G[Q.front()])
            if (D[v] == -1) { // vertex not visited
                Q.push(v);
                D[v] = D[Q.front()] + 1;
            }
            
    return D;
}

int main() {
    ifstream fin("bfs.in");
    ofstream fout("bfs.out");
    
    int n, m, source;
    fin >> n >> m >> source; source--;
    
    for (G.resize(n); m; --m) {
        int u, v;
        fin >> u >> v;
        G[u-1].push_back(v-1);
    }
    
    vector<int> D = bfs(source, G);
    
    copy(D.begin(), D.end(), ostream_iterator<int>(fout, " "));
    fout << endl;
    
    return 0;
}