Cod sursa(job #2578700)

Utilizator NoodlesAndi Domnulete Noodles Data 11 martie 2020 14:15:39
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.15 kb
#include <iostream>
#include <vector>
#include <fstream>

using namespace std;

ifstream f("bfs.in");
ofstream f2("bfs.out");

int viz[100001], coada[100001], finale[100001], x, y, n, m, s, i, prim = 1, ultim = 1, el;
vector<int> listadeAdiacenta[100001];

void bfs(){
    while(prim <= ultim){
        el = coada[prim];
        vector<int> lista = listadeAdiacenta[el];
        for(vector<int>::iterator it = lista.begin(); it != lista.end(); ++it){
            int currentValue = *it;
            if(viz[currentValue] == 1) {
                continue;
            }

            ultim++;
            coada[ultim] = currentValue;
            viz[currentValue] = 1;
            finale[currentValue] = finale[el] + 1;
        }
        prim++;
    }
}

int main()
{
    f >> n >> m >> s;

    for(i = 1; i <= m; i++){
        f >> x >> y;
        listadeAdiacenta[x].push_back(y);
    }

    coada[prim] = s;
    viz[s] = 1;
    finale[s] = 0;

    bfs();

    for(i = 1; i <= n; ++i){
        if(viz[i] == 0){
            f2 << -1 << " ";
        } else {
            f2 << finale[i] << " ";
        }
    }

    return 0;
}