Cod sursa(job #2003332)

Utilizator vlad.ulmeanu30Ulmeanu Vlad vlad.ulmeanu30 Data 22 iulie 2017 18:12:26
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <cstdio>

#define nvf 100000
#define nmu 1000000

using namespace std;

int la[nvf][80]; /// lista de adiacenta
int nvec[nvf]; /// nr de vecini
bool viz[nvf]; /// varf vizitat
int dist[nvf]; /// distanta

int cd[nvf]; /// coada

int main () {
  ifstream fin ( "bfs.in" );
  ofstream fout ( "bfs.out");

  int n, m, s;

  fin >> n >> m >> s;

  s--;

  int i, a, b;

  for ( i = 0; i < m; i++ )  {
    fin >> a >> b;

    a--;
    b--;

    la[a][nvec[a]++] = b;
  }

  viz[s] = 1;
  cd[0] = s;

  for ( i = 0; i < n; i++ )
    dist[i] = -1;

  dist[s] = 0;

  int pr, ut;

  pr = ut = 0;

  while ( pr <= ut ) {
    for ( i = 0; i < nvec[cd[pr]]; i++ ) {
      if ( viz[ la[cd[pr]][i] ] == 0 ) { /// calculul distantei + vizita + introducere in coada
        viz[ la[cd[pr]][i] ] = 1;
        dist[ la[cd[pr]][i] ] = 1 + dist[ cd[pr] ];

        cd[++ut] = la[ cd[pr] ][i];
      }
    }
    pr++;
  }

  for ( i = 0; i < n; i++ )
    fout << dist[i] << ' ';

  fin.close();
  fout.close();

  return 0;
}