Cod sursa(job #2506986)

Utilizator euyoTukanul euyo Data 9 decembrie 2019 11:36:18
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <stdio.h>
#include <vector>
#include <queue>
#define MAXN 100000

using namespace std;

vector<int> adjl[MAXN + 1];
queue<int> q;
int drum[MAXN + 1];
char viz[MAXN + 1];

void BFS() {
  int i, nod, vec;

  while ( !q.empty() ) {
    nod = q.front();
    q.pop();
    for ( i = 0; i < adjl[nod].size(); ++i ) {
      vec = adjl[nod][i];
      if ( viz[vec] != 1 ) {
        q.push( vec );
        drum[vec] = drum[nod] + 1;
        viz[vec] = 1;
      }
    }
  }
}

int main() {
  FILE *fin = fopen( "bfs.in", "r" );
  FILE *fout = fopen( "bfs.out", "w" );
  int n, m, S, i, x, y;

  fscanf( fin, "%d%d%d", &n, &m, &S );
  for ( i = 0; i < m; ++i ) {
    fscanf( fin, "%d%d", &x, &y );
    adjl[x].push_back( y );
  }
  for ( i = 1; i <= n; ++i ) {
    drum[i] = -1;
  }
  drum[S] = 0;
  viz[S] = 1;
  q.push( S );
  BFS();
  for ( i = 1; i <= n; ++i ) {
    fprintf( fout, "%d ", drum[i] );
  }
  fclose( fin );
  fclose( fout );
  return 0;
}