Cod sursa(job #2053512)

Utilizator Tiberiu02Tiberiu Musat Tiberiu02 Data 31 octombrie 2017 20:19:42
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.91 kb
#include <stdio.h>
#include <stdlib.h>

#include <queue>
#include <vector>

using namespace std;

#define MAX_N 100000
#define none -1

int dist[MAX_N];
queue<int> bfs;
vector<int> edges[MAX_N];

int main() {
    FILE *fin = fopen( "bfs.in", "r" ), *fout = fopen( "bfs.out", "w" );

    int n, m, s, i, a, b;
    fscanf( fin, "%d%d%d", &n, &m, &s );

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

    dist[-- s] = 0;
    bfs.push( s );
    while ( bfs.size() ) {
        int u = bfs.front();
        bfs.pop();

        for ( int v : edges[u] )
            if ( dist[v] == none ) {
                dist[v] = dist[u] + 1;
                bfs.push( v );
            }
    }

    for ( i = 0; i < n; i ++ )
        fprintf( fout, "%d ", dist[i] );

    fclose( fin );
    fclose( fout );

    return 0;
}