Cod sursa(job #3335539)

Utilizator RalucaioneteRalucaIonete Ralucaionete Data 22 ianuarie 2026 21:07:18
Problema BFS - Parcurgere in latime Scor 80
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <vector>
#include <queue>
using namespace std;

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

const int N = 1e5 + 1;
vector<queue<int>> lista_ad(N + 1);
queue<int> q;
int d[N + 1];
bool vizitat[N + 1];

int main()
{
    int n, m, s;
    // s este nodul sursa
    in >> n >> m >> s;

    int u, v;
    for (int i = 0; i < m; i++)
    {
        in >> u >> v;
        lista_ad[u].push(v);
    }

    // pt fiecare nod X vrem sa gasim distanta minima de la nodul sursa S la X
    // deci implementam BFS ca sa parcurgem in latime graful
    for (int i = 0; i < n; i++)
    {
        d[i] = -1;
        vizitat[i] = false;
    }

    q.push(s);
    d[s] = 0;
    vizitat[s] = true;
    while (!q.empty())
    {
        int curent = q.front();
        q.pop();
        while (!lista_ad[curent].empty())
        {
            // parcurgem varfurile adiacente nodului curent
            int v = lista_ad[curent].front();
            lista_ad[curent].pop();
            if (!vizitat[v])
            {
                d[v] = d[curent] + 1;
                vizitat[v] = true;
                q.push(v);
            }
        }
    }

    for (int i = 1; i <= n; i++)
    {
        out << d[i] << " ";
    }
    return 0;
}