Cod sursa(job #482748)

Utilizator Smaug-Andrei C. Smaug- Data 4 septembrie 2010 20:57:48
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.75 kb
#include <cstdio>
#include <vector>
#include <string>
using namespace std;

#define MAXN 100010

int main(){

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

  vector <int> G[MAXN];
  int d[MAXN], Queue[MAXN], v[MAXN], i, aux, N, M, S, j;

  memset(v,  0, sizeof(v));
  memset(d, -1, sizeof(d));
  
  scanf("%d%d%d", &N, &M, &S);
  for(i = 1; i <= M; i++){
    scanf("%d%d", &aux, &j);
    G[aux].push_back(j);
    v[aux]++;
  }
  
  Queue[0]=1;
  Queue[Queue[0]]=S;
  d[S]=0;
  
  for(i = 1; i <= Queue[0]; i++)
    for(j = 0; j < v[Queue[i]]; j++)
      if(d[G[Queue[i]][j]] == -1){
	Queue[++Queue[0]]=G[Queue[i]][j];
	d[Queue[Queue[0]]]=d[Queue[i]]+1;
      }

  for(i = 1; i <= N; i++)
    printf("%d ", d[i]);
  printf("\n");

  return 0;

}