Cod sursa(job #1091490)

Utilizator cernat.catallinFMI Cernat Catalin Stefan cernat.catallin Data 25 ianuarie 2014 19:00:35
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <stdio.h>
#include <vector>
#include <queue>
using namespace std;

#define Nmax 100005

vector <int> graph[Nmax];
vector <int>::iterator it;
int n, m, s;
int dist[Nmax];

void read()
{
    int x, y;
    freopen("bfs.in", "r", stdin);

    scanf("%d %d %d", &n, &m, &s);
    for (int i = 0; i < m; ++i){
        scanf("%d %d", &x, &y);
        graph[x].push_back(y);
    }

    fclose(stdin);
}

void bfs(){
    queue <int> q;
    int from;

    dist[s] = 1;
    q.push(s);
    while( !q.empty() ){
        from = q.front();
        q.pop();

        for (it = graph[from].begin(); it != graph[from].end(); ++it)
            if (!dist[*it]){
                dist[*it] = dist[from] + 1;
                q.push(*it);
            }
    }
}

int main()
{
    read();
    bfs();
    freopen("bfs.out", "w", stdout);
    for (int i = 1; i <= n; ++i)
        printf("%d ", dist[i] - 1);
    fclose(stdout);

    return 0;
}