Cod sursa(job #2854227)

Utilizator teodorescunicolasteodorescu nicolas alexandru teodorescunicolas Data 21 februarie 2022 08:32:57
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <stdio.h>
#include <vector>
#include <queue>

#define MMAXX 1000000
#define NMAXX 100000

using namespace std;

vector <int> graf[NMAXX + 1];
queue <int> bfsQueue;

int v[NMAXX + 1];

void bfs( int node ) {
    int qFront;

    bfsQueue.push( node );
    v[node] = 1;

    while ( !bfsQueue.empty() ) {
        qFront = bfsQueue.front();

        for ( int neighbour : graf[qFront] ) {
            if ( v[neighbour] == 0 ) {
                bfsQueue.push( neighbour );
                v[neighbour] = v[qFront] + 1;
            }
        }

        bfsQueue.pop();
    }
}

int main()
{
    FILE *fin, *fout;
    int n, m, s, i, a, b;

    fin = fopen( "bfs.in", "r" );
    fout = fopen( "bfs.out", "w" );

    fscanf( fin, "%d%d%d", &n, &m, &s );
    for ( i = 0; i < m; i++ ) {
        fscanf( fin, "%d%d", &a, &b );
        graf[a].push_back( b );
    }

    bfs( s );

    for ( i = 1; i <= n; i++ ) {
        fprintf( fout, "%d ", v[i] - 1 );
    }

    fclose( fin );
    fclose( fout );
    return 0;
}