Cod sursa(job #2924559)

Utilizator ioanatcioana t ioanatc Data 5 octombrie 2022 08:02:30
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.71 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <deque>
using namespace std;

vector<int> Dist(vector<vector<int>> la, vector<bool> viz, int s);

void ScriereFisier(vector<int> dist);

int main(){
    ifstream f("bfs.in");

    int n=0, m=0, s=0, x, y;
    // n = nr de noduri ; m = nr de muchii ; s = nodul initial din bfs
    f>>n>>m>>s;

    // lista_adiac = lista de adiacenta a grafului curent
    vector<int> adiacente;
    vector<vector<int>> lista_adiac(m, adiacente);

    // x,y muchiile citite din fisier
    while(f>>x>>y){
        lista_adiac[x-1].push_back(y-1);
    }

    // viz => tine minte ce nod am vizitat in timpul verificarii
    vector<bool> viz(n, 0);
    
    vector<int> dist = Dist(lista_adiac, viz, s-1);
    ScriereFisier(dist);

    return 0;
}

vector<int> Dist(vector<vector<int>> la, vector<bool> viz, int s){
// dist => distantele de la nodul s la nodul i unde i este indicele in vector
    vector<int> dist(viz.size(), -1);

    // coada de noduri folosita la verificari
    deque<int> c;
    c.push_back(s);
    dist[s]=0;

    while(!c.empty()){
        int nod = c.front();
        c.pop_front();

        viz[nod]=1;

        for(int nod_adiacent : la[nod]){
            // cand am gasit un nod nevizitat il marcam in viz, calculam distanta
            // si il introducem in coada
            if(!viz[nod_adiacent]){

                viz[nod_adiacent]=1;
                c.push_back(nod_adiacent);

                dist[nod_adiacent]=dist[nod]+1;
            }
        }
    }
    return dist;
}
void ScriereFisier(vector<int> dist){
    ofstream g("bfs.out");

    for(int distanta : dist){
        g<<distanta<<" ";
    }
}