Cod sursa(job #2672108)

Utilizator MevasAlexandru Vasilescu Mevas Data 13 noiembrie 2020 07:07:35
Problema BFS - Parcurgere in latime Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <fstream>
#include <iostream>
#include <queue>
#include <vector>

using namespace std;

ifstream fin("bfs.in");
ofstream fout("bfs.out");

vector<int> graph[100000];
vector<bool> visited;
vector<int> distances;
queue<int> q;

void bfs(int start) {
    q.push(start);
    visited[start] = true;

    while(!q.empty()) {
        int head = q.front();

        for(auto nb : graph[head]) {
            if(visited[nb]) {
                continue;
            }

            distances[nb] = distances[head] + 1;
            q.push(nb);
            visited[nb] = true;
        }

        q.pop();
    }
}

int main() {
    int n, m, s;
    fin >> n >> m >> s;

    visited.resize(n + 1);
    distances.resize(n + 1);

    for(int i = 0; i <= m; i++) {
        int x, y;
        fin >> x >> y;

        graph[x].push_back(y);
    }

    bfs(s);

    for(int i = 1; i < distances.size(); i++) {
        if (distances[i] == 0 && i != s){
            fout << -1 << ' ';
            continue;
        }

        fout << distances[i] << ' ';
    }
}