Cod sursa(job #780762)

Utilizator visanrVisan Radu visanr Data 21 august 2012 11:59:36
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.05 kb
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <vector>
#include <queue>
using namespace std;


#define nmax 100010

vector<int> G[nmax];
int N, M, X, Y, Cost[nmax], S;


void BFS(int startNode)
{
     int node, i;
     vector<int> :: iterator it;
     queue<int> Q;
     Q.push(startNode);
     for(i = 1; i <= N; i++) Cost[i] = -1;
     Cost[startNode] = 0;
     while(!Q.empty())
     {
                      node = Q.front(); Q.pop();
                      for(it = G[node].begin(); it != G[node].end(); ++it)
                             if(Cost[*it] == -1)
                                          Cost[*it] = Cost[node] + 1,
                                          Q.push(*it);
     }
}

int main()
{
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);
    int i;
    scanf("%i %i %i", &N, &M, &S);
    for(i = 1; i <= M; i++)
    {
          scanf("%i %i", &X, &Y);
          G[X].push_back(Y);
    }
    BFS(S);
    for(i = 1; i <= N; i++) printf("%i ", Cost[i]);
    return 0;
}