Cod sursa(job #2822363)

Utilizator catarau.bianca.Bianca Catarau catarau.bianca. Data 23 decembrie 2021 21:35:37
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.56 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
#include <bits/stdc++.h>
using namespace std;

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


class graf
{
   int n, m;
   vector <int> muchii[100001];
public:
    graf(int n, int m);
    void citire_orientat();
    void bfs(int s);
};
graf :: graf(int n, int m)
{
    this->n=n;
    this->m = m;
}
void graf::citire_orientat()
{
    int nod1, nod2;
    for (int i = 0; i <= m; i++)
    {
        f >> nod1 >> nod2;
        muchii[nod1].push_back(nod2);
    }
}
void graf :: bfs(int s)
{
    queue <int> q;
    bool vizitat[100001];
    int distanta[100001];

    vizitat[s] = 1;
    q.push(s); //adaugam in coada s-ul de start si il marcam ca vizitat si distanta 0
    distanta[s]=0;

    while(!q.empty())//daca avem elemente in coada, executam:
    {
        int curent = q.front(); //nodul curent devine cel mai vechi nod adaugat in coada
        q.pop();
        //parcurgem lista de adicaneta pt a gasi varfurile adiacente nevizitate ale noduliui curent
        for(auto i : muchii[curent])
            if(!vizitat[i])
            {
                vizitat[i] = 1;
                q.push(i);
                distanta[i] = distanta[curent] + 1;
            }
    }

    for(int i = 1; i <= n; ++i)
        if(vizitat[i])
            g << distanta[i] << " ";
        else
            g << -1 << " ";
}
int main()
{
    int n, m, s;
    f >> n >> m >> s;
    graf G(n, m);
    G.citire_orientat();
    G.bfs(s);

    return 0;
}