Cod sursa(job #2636960)

Utilizator andreic06Andrei Calota andreic06 Data 20 iulie 2020 19:34:23
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <iostream>
#include <vector>
#include <queue>
#include <string.h>
#include <fstream>

using namespace std;
const int N = 1e5;
bool visited[N+1];
int actual_dist[N+1];
int dist;

vector<int> edges[N+1];
queue <int> bfs_q;
void bfs ( int start_node ) {
   actual_dist[start_node] = dist = 0;
   bfs_q.push ( start_node );
   int actual_node;
   do {
     actual_node = bfs_q.front();
     bfs_q.pop ();
     visited[actual_node] = 1;
     dist = actual_dist[actual_node];
     for ( int i = 0; i < (int)edges[actual_node].size (); i ++ ) {
        if ( visited[edges[actual_node][i]] == 0 ) {
          bfs_q.push ( edges[actual_node][i] );
          visited[edges[actual_node][i]] = 1;
          actual_dist[edges[actual_node][i]] = dist + 1;
        }
     }
   }
   while ( !bfs_q.empty()  );
}

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

int main()
{
   int n, m, node_u;
   fin >> n >> m >> node_u;


   for ( int i = 1; i <= m; i ++ ) {
      int x, y;
      fin >> x >> y;
      edges[x].push_back ( y );
   }

   bfs ( node_u );
   for ( int i = 1; i <= n; i ++ ) {
      if ( i == node_u )
        fout << 0;
      else if ( actual_dist[i] == 0 )
        fout << -1;
      else
        fout << actual_dist[i];
      fout << ' ';
   }


    return 0;
}