Cod sursa(job #2001001)

Utilizator ruxandramateiMatei Ruxandra ruxandramatei Data 15 iulie 2017 14:02:05
Problema BFS - Parcurgere in latime Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 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

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


int bfs(int ajung, int plec){
  if(plec == ajung)
    return 0;

  int p = 1, u = 1;
  int viz[100001],coada[100001];

  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]].urm;
    while (parcurg != NULL) {
      if(viz[parcurg -> val] == -1){
        viz[parcurg -> val] = viz[coada[p]] + 1;
        if(parcurg -> val == ajung)
          return viz[parcurg -> val];
        coada[++u] = parcurg -> val;
      }
      parcurg = parcurg -> urm;
    }
    p++;
  }
  return -1;
}

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].urm;
    v[x].urm = aux;
  }
  for(int i = 1; i <= n ; i++)
    out << bfs(i, s) << ' ';
}

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