Cod sursa(job #1247824)

Utilizator crucerucalinCalin-Cristian Cruceru crucerucalin Data 23 octombrie 2014 23:59:14
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.2 kb
#include <fstream>
#include <vector>
#include <list>
#include <queue>
#include <iostream>

std::vector<int> distances(std::vector< std::list<int> > &adj, int S)
{
    std::vector<int> dists(adj.size(), -1);
    std::queue<int> bfs_queue;

    bfs_queue.push(S);
    int count = 0;
    dists[S] = count;

    while (!bfs_queue.empty()) {
        int curr_node = bfs_queue.front();
        bfs_queue.pop();

        for (std::list<int>::const_iterator ij = adj[curr_node].cbegin();
             ij != adj[curr_node].cend(); ++ij)
            if (dists[*ij] == -1) {
                bfs_queue.push(*ij);
                dists[*ij] = dists[curr_node] + 1;
            }
    }

    return dists;
}

int main()
{
    std::ifstream fin("bfs.in");
    std::ofstream fout("bfs.out");

    int N, M, S;
    fin >> N >> M >> S;

    std::vector< std::list<int> > adj(N);

    for (int i = 0; i < M; ++i) {
        int x, y;
        fin >> x >> y;

        adj[x-1].push_back(y-1);
    }
    fin.close();

    --N, --M, --S;
    std::vector<int> dists = distances(adj, S);
    for (std::vector<int>::const_iterator it = dists.cbegin();
         it != dists.cend(); ++it) {
        fout << *it << " ";
    }

    fout.close();
    return 0;
}