Cod sursa(job #2854357)

Utilizator Victor2006Nicola Victor-Teodor Victor2006 Data 21 februarie 2022 11:46:55
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <stdio.h>
#include <vector>
#include <queue>
#define N 100000

std::vector <int> g[N + 1];
int dis[N + 1];
int n;

std::queue <int> coada;

void bfs( int node ) {
    coada.push( node );
    do {
        node = coada.front();
        coada.pop();
        for ( const int& vecin : g[node] ) {
            if ( dis[vecin] == -1 ) {
                dis[vecin] = dis[node] + 1;
                coada.push( vecin );
            }
        }
    } while ( !coada.empty() );
}

inline void addMuchie( int a, int b ) {
    g[a].push_back( b );
}

int main() {
    FILE *fin, *fout;
    int m, a, b, start;

    fin = fopen( "bfs.in", "r" );
    fscanf( fin, "%d%d%d", &n, &m, &start );
    for ( int i = 0; i < m; i ++ ) {
        fscanf( fin, "%d%d", &a, &b );
        addMuchie( a, b );
    }
    fclose( fin );

    for ( int i = 1; i <= n; i ++ )
        dis[i] = -1;
    dis[start] = 0;
    bfs( start );

    fout = fopen( "bfs.out", "w" );
    fprintf( fout, "%d", dis[1] );
    for ( int i = 2; i <= n; i ++ )
        fprintf( fout, " %d", dis[i] );
    fprintf( fout, "\n" );
    fclose( fout );
    return 0;
}