Cod sursa(job #779287)

Utilizator visanrVisan Radu visanr Data 17 august 2012 13:31:19
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.02 kb
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <queue>
using namespace std;


#define nmax 100010
#define pb push_back

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

void BFS();

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

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