Cod sursa(job #1061737)

Utilizator RarRaresNedelcu Rares RarRares Data 20 decembrie 2013 11:09:03
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.1 kb
#include <iostream>
#include <vector>
#include <queue>
#include <cstdio>

#define nmax 100005


using namespace std;


int N, M, S;
vector<int> graf[nmax];
queue<int> coada;
int sol[nmax];


void citire()
{
    cin >> N >> M >> S;

    for(int i = 1; i <= N; i++)
        sol[i] = -1;
    for(int i = 1; i <= M; i++)
    {
        int x, y;
        cin >> x >> y;
        graf[x].push_back(y);
    }

}


void latime()
{
    coada.push(S);
    sol[S] = 0;
    while(!coada.empty())
    {
        int v = coada.front();
        coada.pop();
        vector<int>::iterator it;

        for(it = graf[v].begin(); it != graf[v].end(); ++it)
        {
            int val = *it;
            if(sol[val] == -1)
            {
                sol[val] = sol[v] + 1;
                coada.push(val);
            }
        }
    }
}

void afisare()
{
    for(int i = 1; i <= N; i++)
        cout << sol[i] << ' ';
}

int main()
{
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);

    citire();

    latime();

    afisare();
    return 0;
}