Cod sursa(job #3336971)

Utilizator iulia_learning_timeLearning Time iulia_learning_time Data 26 ianuarie 2026 20:02:50
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.57 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>

using namespace std;

// Definim fișierele de intrare și ieșire
ifstream fin("bfs.in");
ofstream fout("bfs.out");

// Constante pentru dimensiunea maximă (conform restricțiilor: 100.000)
const int N_MAX = 100005;

// Lista de adiacență: adj[x] va conține lista vecinilor nodului x
vector<int> adj[N_MAX];

// Vectorul de distanțe: dist[i] = distanța minimă de la S la i
int dist[N_MAX];

int main() {
    int N, M, S;

    // 1. CITIREA DATELOR
    fin >> N >> M >> S;

    for (int i = 0; i < M; i++) {
        int x, y;
        fin >> x >> y;
        // Graf orientat: adăugăm muchia doar de la x la y
        adj[x].push_back(y);
    }

    // 2. INITIALIZARE
    // Inițializăm toate distanțele cu -1 (presupunem că nodurile sunt inaccesibile)
    for (int i = 1; i <= N; i++) {
        dist[i] = -1;
    }

    // 3. ALGORITMUL BFS
    queue<int> Q; // Coada pentru BFS

    // Pornim din nodul sursă S
    dist[S] = 0;
    Q.push(S);

    while (!Q.empty()) {
        int nodCurent = Q.front();
        Q.pop();

        // Parcurgem toți vecinii nodului curent
        for (int vecin : adj[nodCurent]) {
            if (dist[vecin] == -1) { //    // Dacă vecinul nu a fost vizitat (are distanța -1)
                dist[vecin] = dist[nodCurent] + 1; // actualizam distanta
                Q.push(vecin); // il adăugăm în coadă pentru a-i explora vecinii mai târziu
            } 
        }
    }

    // 4. AFISARE
    for (int i = 1; i <= N; i++) {
        fout << dist[i] << " ";
    }

    return 0;
}