Cod sursa(job #2792844)

Utilizator AlexNicuNicu Alexandru AlexNicu Data 2 noiembrie 2021 13:04:11
Problema BFS - Parcurgere in latime Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

ifstream cin ( "bfs.in" );
ofstream cout ( "bfs.out" );

#define NMAX 100000
#define MMAX 1000000

struct GRAF {
    int nod, dist;
};

vector<GRAF> v[NMAX];
queue<GRAF> BFS;
int ans[NMAX], dist;

void bfs() {
    GRAF elem;
    while ( !BFS.empty() ) {
        elem = BFS.front();
        for ( auto copil: v[elem.nod] ) {
            if ( ans[copil.nod] == 0 ) {
                BFS.push({copil.nod, elem.dist + 1});
                ans[copil.nod] = elem.dist + 1;
            }
        }
        dist++;
        BFS.pop();
    }
}

int main() {
    int n, m, s, i, x, y;
    cin >> n >> m >> s;
    for ( i = 0; i < m; i++ ) {
        cin >> x >> y;
        v[x].push_back({y, 1});
    }
    BFS.push({s, 1});
    ans[s] = 1;
    bfs();
    for ( i = 1; i <= n; i++ ) {
        if ( ans[i] == 0 ) {
            cout << "-1 ";
        }
        else {
            cout << ans[i] - 1 << " ";
        }
    }
    return 0;
}