Cod sursa(job #904563)

Utilizator SPDionisSpinei Dionis SPDionis Data 4 martie 2013 16:28:29
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <deque>
#include <utility>
#include <vector>
#include <iostream>

using std::cout;
using std::vector;
std::ifstream in("bfs.in");
std::ofstream out("bfs.out");
int N,M,S;
std::deque<int> c;
vector< vector<int> > arcs;
vector<int> dist;
vector<int> v;

void init()
{
    arcs.resize(N + 1);
    for (int i = 0; i < M; ++i)
    {
        int x,y; in >> x >> y;
        arcs[x].push_back(y);
    }
    dist.resize(N + 1,2e9);
    dist[S] = 0;
    v.resize(N + 1);
    v[S] = 1;
}


int main()
{
    in >> N >> M >> S;
    init();
    c.push_back(S);

    while ( !c.empty() )
    {
        int temp = c.front();
        c.pop_front();
        for (int i = 0; i < arcs[temp].size(); ++i)
            if ( v[ arcs[temp][i] ] == 0 ) {
            c.push_back( arcs[temp][i] );
            dist[ arcs[temp][i] ] = dist[temp] + 1;
            v[ arcs[temp][i] ] = 1;
        }
    }

    for (int i = 1; i <= N; ++i)
        dist[i] == 2e9 ? out << -1 << " " : out << dist[i] << " ";

    in.close();
    out.close();
    return 0;
}