Cod sursa(job #2001007)

Utilizator ruxandramateiMatei Ruxandra ruxandramatei Data 15 iulie 2017 14:18:04
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>

using namespace std;

ifstream in("bfs.in");
ofstream out("bfs.out");

struct nod{
  int val;
  nod *urm;
} * v[100001];

int n, m, s;//date de intrare
int viz[100001],coada[100001];

void initializare(){
  for(int i = 1; i <= n; i++)
    v[i]  = NULL;
}


int bfs(int plec){

  int p = 1, u = 1;
  for(int i = 1; i <= n ;i++)
    viz[i] = -1;

  viz[plec] = 0;
  coada[1] = plec;

  while(p <=u ){
    nod * parcurg = new nod;
    parcurg = v[coada[p]];
    while (parcurg != NULL) {
      if(viz[parcurg -> val] == -1){
        viz[parcurg -> val] = viz[coada[p]] + 1;
        coada[++u] = parcurg -> val;
      }
      parcurg = parcurg -> urm;
    }
    p++;
  }
}

void citire(){
  in >> n >> m >> s;
  initializare();
  for(int i = 1; i <= m; i++){
    int x, y;
    in >> x >> y;
    nod * aux = new nod;
    aux -> val = y;
    aux -> urm = v[x];
    v[x] = aux;
  }
  bfs(s);
  for(int i = 1; i <= n; i++)
      out << viz[i] << ' ';
}

int main(){
  citire();
  return 0;
}