Cod sursa(job #2437580)

Utilizator raidenjiAndrei raidenji Data 9 iulie 2019 19:17:06
Problema BFS - Parcurgere in latime Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.28 kb
#define F 

using namespace std;

#ifdef IO
    #include <iostream>
    #define fin cin
    #define fout cout 
#endif

#ifdef F
    #include <fstream>
    ifstream fin("bfs.in");
    ofstream fout("bfs.out");  
#endif

#include <vector>
#include <queue>
#include <tuple>
#include <cstring>

int N, M, S, x, y;
vector <int> G[100002];
int costs[100002];

void getMinDistance(int startNode);

int main() {
    fin >> N >> M >> S;


    memset(costs, -1, sizeof(costs));

    for (int i = 1; i <= M; ++i) {
        fin >> x >> y;
        G[x].push_back(y);
    }

    getMinDistance(S);
    for (int i = 1; i <= N; ++i) {
        fout << costs[i] << ' '; 
    }

#ifdef F
    fin.close();
    fout.close();
#endif
}

void getMinDistance(int startNode) {
    queue <pair <int, int>> Q;
    bool visited[100002];

    Q.push(make_pair(startNode, 0));
    visited[startNode] = true;

    while (!Q.empty()) {
        auto crtNode = Q.front();
        costs[crtNode.first] = crtNode.second;
        Q.pop();

        for (auto i = G[crtNode.first].begin(); i != G[crtNode.first].end(); ++i) {
            if (!visited[*i]) {
                Q.push(make_pair(*i, (crtNode.second + 1)));
                visited[*i] = true;
            }
        }
    }
}