Cod sursa(job #1265752)

Utilizator cella.florescuCella Florescu cella.florescu Data 17 noiembrie 2014 18:36:23
Problema BFS - Parcurgere in latime Scor 100
Compilator c Status done
Runda Arhiva educationala Marime 0.87 kb
#include <stdio.h>
#include <stdlib.h>
int lst[100001], vf[1000001], urm[1000001], m, viz[100001], coada[1000001];

void adauga(int x, int y){
  vf[++m]=y;
  urm[m]=lst[x];
  lst[x]=m;
}

void parBfs(int x, int N){
  int p, y, beg, end;
  beg=end=0;
  viz[x]=1; coada[beg]=x;
  while(beg<=end){
    x=coada[beg++];
    p=lst[x];
    while(p){
      y=vf[p];
      if(!viz[y]){
        coada[++end]=y;
        viz[y]=viz[x]+1;
      }
      p=urm[p];
    }
  }
}

int main()
{
    FILE *fin, *fout;
    int N, M, x, y, i, S;
    fin=fopen("bfs.in", "r");
    fscanf(fin, "%d%d%d", &N, &M, &S);
    for(i=0; i<M; i++){
      fscanf(fin, "%d%d", &x, &y);
      adauga(x, y);
    }
    fclose(fin);
    parBfs(S, N);
    fout=fopen("bfs.out", "w");
    for(i=1; i<=N; i++)
      fprintf(fout, "%d ", viz[i]-1);
    fprintf(fout, "\n");
    return 0;
}