Cod sursa(job #1205090)

Utilizator hopingsteamMatraguna Mihai-Alexandru hopingsteam Data 5 iulie 2014 03:43:12
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include    <iostream>
#include    <fstream>
#include    <vector>
#include    <queue>

using namespace std;

ifstream    fin     ("bfs.in");
ofstream    fout    ("bfs.out");
ofstream    fdebug  ("bfs.debug");

#define LIM 100005

int N, M, S;
int G[LIM], Need[LIM];

vector  < int > V[LIM];
queue   < int > qu;

void BFS(int n)
{
    for(int i = 0; i < V[n].size(); i++)
    {
        if(Need[V[n][i]] == -1)
        {
            qu.push(V[n][i]);
            Need[V[n][i]] = Need[n] + 1;
        }
    }
}

void read( )
{
    int x, y;
    fin >> N >> M >> S;

    for(int i = 1; i <= N; i++)
        Need[i] = -1;

    Need[S] = 0;

    for(int i = 1; i <= M; i++)
    {
        fin >> x >> y;
        V[x].push_back(y);
    }

    qu.push(S);
    while(!qu.empty())
    {
        BFS(qu.front());
        qu.pop();
    }
}

void solve()
{
    for(int i = 1; i <= N; i++)
        fout << Need[i] << " ";
    fout << "\n";
}

int main( )
{
    read();
    solve();
    return 0;
}