Cod sursa(job #2576884)

Utilizator TveinDenisDenis Tvein TveinDenis Data 7 martie 2020 09:40:44
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.38 kb
#include <iostream>
#include <iomanip>
#include <vector>
#include <queue>
#include <fstream>
#include <algorithm>

using std::cout;
using std::endl;
using std::cin;
using std::sort;
using std::queue;
using std::vector;
using std::setprecision;
using std::ios;
using std::fstream;

fstream file1("bfs.in", ios::in);
fstream file2("bfs.out", ios::out);

int n, m, s, d[100005];
vector<int> vecini[100005];
vector<bool> vizitat(100005);
queue<int> coada;

void formeaza_vecini();
void bfs(int start);

int main(int argc, char** argv) {

    file1 >> n >> m >> s;
    formeaza_vecini();
    
    for (int i{ 1 }; i <= n; i++) {
        d[i] = -1;
    }

    bfs(s);

    for (int i{ 1 }; i <= n; i++) {
        file2 << d[i] << ' ';
    }

    file1.close();
    file2.close();
    return 0;
}

void bfs(int start) {
    d[start] = 0;
    vizitat[start] = true;
    coada.push(start);
    while (!coada.empty()) {
        int nod = coada.front();
        coada.pop();
        for (int i{ 0 }; i < vecini[nod].size(); i++) {
            if (!vizitat[vecini[nod][i]]) {
                vizitat[vecini[nod][i]] = true;
                coada.push(vecini[nod][i]);
                d[vecini[nod][i]] = 1 + d[nod];
            }
        }
    }
}

void formeaza_vecini() {
    int i, j;
    while (file1 >> i >> j){
        vecini[i].push_back(j);
    }
}