Cod sursa(job #2259216)

Utilizator alex.cojocaruAlex Cojocaru alex.cojocaru Data 13 octombrie 2018 10:33:27
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <vector>
#include <queue>

#define NMAX 100000

struct muchie {
  int nod ;
};

using namespace std;

vector <muchie> mat [ NMAX + 1 ] ;
int dist [ NMAX + 1 ] ;
queue <muchie> q ;

void bfs (int s ) {
  q.push ({s}) ;
  dist[s] = 0 ;
  while (!q.empty()) {
    muchie first = q.front() ;
    for (auto elem : mat[first.nod] ) {
      if (dist[elem.nod] == 0 && elem.nod != s) {
        q.push({elem.nod}) ;
        dist[elem.nod] = dist[first.nod] + 1 ;
      }
    }
    q.pop() ;
  }
}

int main() {

  FILE *fin, *fout ;
  fin = fopen ("bfs.in", "r" ) ;
  fout = fopen ("bfs.out", "w" ) ;
  int n, m, s, i, a, b ;
  fscanf (fin, "%d%d%d", &n, &m, &s ) ;
  for (i = 0 ; i < m ; i++ ) {
    fscanf (fin, "%d%d", &a, &b ) ;
    mat[a].push_back({b}) ;
  }
  bfs (s) ;
  for (i = 1 ; i <= n ; i++ ) {
    if (dist[i] == 0 && i != s )
      fprintf (fout, "-1 " ) ;
    else
      fprintf (fout, "%d ", dist[i] ) ;
  }
  return 0;
}