Cod sursa(job #2367757)

Utilizator AplayLazar Laurentiu Aplay Data 5 martie 2019 12:05:49
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <cstdio>
#include <vector>
#include <queue>

#define INF 0x8FFFFFFF
#define N_MAX 100001

bool visited[N_MAX];
int N, M, start, dist[N_MAX];
std::vector<int> graph[N_MAX];
std::queue<int> q;

int main() {
    freopen("bfs.in", "r", stdin);
    freopen("bfs.out", "w", stdout);

    scanf("%d%d%d", &N, &M, &start);
    for (int it = 0; it < M; ++it) {
        int x, y;
        scanf("%d%d", &x, &y);
        graph[--x].push_back(--y);
    }

    for (int it = 0; it < N; ++it) {
        dist[it] = INF;
    }
    
    --start;
    dist[start] = 0;
    visited[start] = true;
    q.push(start);
    while (!q.empty()) {
        int current = q.front(); q.pop();
        for (int it = 0; it < graph[current].size(); ++it) {
            if (!visited[graph[current][it]]) {
                visited[graph[current][it]] = true;
                dist[graph[current][it]] = 1 + dist[current];
                q.push(graph[current][it]);
            }
        }
    }

    for (int it = 0; it < N; ++it) {
        printf("%d ", INF == dist[it] ? -1 : dist[it]);
    }

    return 0;
}