Cod sursa(job #2856445)

Utilizator andrei_marciucMarciuc Andrei andrei_marciuc Data 23 februarie 2022 21:24:27
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.91 kb
#include <fstream>
#include <vector>
#include <queue>
#define INF 10000000
#define MAX 100002
 
std::ifstream cin( "bfs.in" );
std::ofstream cout( "bfs.out" );
 
int n;
std::vector< int > nod[ MAX ];
int dp[ MAX ];
std::queue< int > q;
 
void bfs( int N ) {
    for( int i = 1; i <= n; i++ )
        dp[ i ] = INF;

    q.push( N );
    dp[ N ] = 0;
    while( !q.empty() ) {
        int N = q.front();
        q.pop();
        for( int next : nod[ N ] )
            if( dp[ N ] + 1 <= dp[ next ] ) {
                dp[ next ] = dp[ N ] + 1;
                q.push( next );
            }
    }
}
 
int main()
{
    int m, s;
    cin >> n >> m >> s;
    for( int i = 1; i <= m; i++ ) {
        int u, v;
        cin >> u >> v;
        nod[ u ].push_back( v );
    }

    bfs( s );
    for( int i = 1; i <= n; i++ )
        if( dp[ i ] == INF )
            cout << -1 << " ";
        else cout << dp[ i ] << " ";
    return 0;
}