Cod sursa(job #2153111)

Utilizator ade_tomiEnache Adelina ade_tomi Data 5 martie 2018 22:49:53
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.96 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <cstdio>

using namespace std;

const int NMAX = 100005, INF = 0x3f3f3f3f;

queue<int> q;
vector <int> v[NMAX];
int d[NMAX];

void bfs(int start) {
    q.push(start);
    d[start] = 0;

    while (!q.empty()) {
        int k = q.front();
        
        for (auto nod: v[k]) {
            if (d[k]  + 1  < d[nod]) { 
                d[nod] = d[k] + 1;
                q.push(nod);
            }         
        }
        q.pop();
    }
}

int main() {
    int n, m, start, a, b;

    ifstream cin ("bfs.in");
    ofstream cout ("bfs.out");
    cin >> n >> m >> start;

    for (int i = 1; i <= m; i++) {
        cin >> a >> b;
        v[a].push_back(b);
    }

    for (int i = 1; i <= n; i++) {
        d[i] = INF;
    }
    
    bfs(start);

    for (int i = 1;  i <= n; i++) {
        if (d[i] != INF || i == start) 
            cout << d[i] << " ";
        else 
            cout << "-1 ";
    }
}