Cod sursa(job #2798081)

Utilizator SofeiAndreiSofei Andrei SofeiAndrei Data 10 noiembrie 2021 21:27:04
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.55 kb
#include <bits/stdc++.h>
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("bfs.in");
ofstream g("bfs.out");
class graf
{
    private:
        int n;
        vector< vector<int> > vecini;

    public:
        graf(int n);
        void citire_graf_orientat(int m);
        void citire_graf_neorientat(int m);
        void BFS(int start);
        void DFS(int start);
};
graf :: graf(int N)
{
    this->n=N;
    vecini.resize(n+1);
}
void graf :: citire_graf_orientat(int M)
{
    int a,b;
    for(int i=1;i<=M;i++){
        cin>>a>>b;
        vecini[a].push_back(b);
    }
}
void graf :: citire_graf_neorientat(int m)
{
    int a,b;
    for(int i=1;i<=m;i++){
        cin>>a>>b;
        vecini[a].push_back(b);
        vecini[b].push_back(a);
    }
}
void graf :: BFS(int start)
{
    queue <int> coada;
    int nr_vecini_curent;
    int distanta[this->n+1];
    for(int i=1;i<=n;i++){
        distanta[i]=-1;
    }
    coada.push(start);
    distanta[start]=0;
    while(coada.empty()==0){
        nr_vecini_curent = vecini[coada.front()].size();
        for(int i=0;i<nr_vecini_curent;i++){
            if(distanta[vecini[coada.front()][i]]==-1){
                coada.push(vecini[coada.front()][i]);
                distanta[vecini[coada.front()][i]]=distanta[coada.front()]+1;
            }
        }
        coada.pop();
    }
    for(int i=1;i<=n;i++){
        g<<distanta[i]<<" ";
    }
}
int n,m,S;
int main ()
{
    f>>n>>m>>S;
    graf G(n);
    G.citire_graf_orientat(m);
    G.BFS(S);
}