Cod sursa(job #2927351)

Utilizator GeorgeNistorNistor Gheorghe GeorgeNistor Data 20 octombrie 2022 10:23:45
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.47 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <set>
#include <queue>

using namespace std;

vector<set<int>> graf;
int N, M, S;
vector<int> vc;

void citireGraf(){
    ifstream fin("bfs.in");
    fin >> N >> M >> S;
    graf = vector<set<int>>(N+1);
    int nod_1, nod_2;
    for(int i = 1; i <= M; i++){
        fin >> nod_1 >> nod_2;
        graf[nod_1].insert(nod_2);
    }
    fin.close();
}

void afisareGraf(){
    ofstream fout("bfs.out");
    for(int i = 1; i <= N; i++){
        fout << i << " -> ";
        for(auto nod :  graf[i])
            fout << nod << " ";
        fout << '\n';
    }
    fout.close();
}

void BFS(int nod_start){
    ofstream fout("bfs.out");
    vector<int> dist = vector<int>(N+1);
    queue<int> coada;
    if(vc.empty())
        vc = vector<int>(N+1);
    int nod_curent = nod_start;
    vc[nod_start] = 1;
    dist[nod_start] = 0;
    coada.push(nod_start);
    while(!coada.empty()){
        nod_curent = coada.front();
        //cout << nod_curent << ' ';
        coada.pop();
        for(const int nod_vecin : graf[nod_curent]){
            if(vc[nod_vecin] == 0){
                vc[nod_vecin] = 1;
                dist[nod_vecin] = dist[nod_curent]+1;
                coada.push(nod_vecin);
            }
        }
    }
    for(int i = 1; i <= N; i++){
        if(!dist[i] and i != nod_start)
            dist[i] = -1;
        fout << dist[i] << ' ';
    }
    fout.close();
}
int main() {
    citireGraf();
    BFS(S);
    return 0;
}