Cod sursa(job #3196477)

Utilizator zamfiresqAlexandra Zamfirescu zamfiresq Data 23 ianuarie 2024 23:45:02
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.57 kb
#include <iostream>
#include <vector>
#include <fstream>
#include <queue>
#include <climits> // INT_MAX


std::vector<std::vector<int> > listaAdiacenta;
std::vector<bool> vizitat;
std::vector<int> cost; // vector pentru costuri


void BFS(int s){ // nod sursa
    std::queue<int> q;
    q.push(s); // inseram nodul sursa in coada vida
    vizitat[s] = true; // marcam nodul sursa ca vizitat
    cost[s] = 0; // costul de la sursa la ea insasi este 0

    while(!q.empty()){
       s = q.front();
        q.pop();

        for(int &nodDest : listaAdiacenta[s]){
            if(!vizitat[nodDest]){
                vizitat[nodDest] = true; // marcam nodul muchiei ca vizitat
                cost[nodDest] = cost[s] + 1; // costul de la nodul v la nodul u este costul de la nodul v + 1
                q.push(nodDest);
            }
        }
    }
}


int main(){

    std::ifstream fin("bfs.in");
    std::ofstream fout("bfs.out");

    int N, M, S;
    fin >> N >> M >> S;
    S--; // decrementam S pentru a incepe indexarea de la 0

    vizitat.resize(N, false);
    cost.resize(N, INT_MAX); // initializam toate costurile cu 0
    listaAdiacenta.resize(N);

    for(int i = 0; i < M; i++){
        int x, y;
        fin >> x >> y;
        x--;
        y--;
        listaAdiacenta[x].push_back(y);
//        listaAdiacenta[y].push_back(x);
    }

    fin.close();

    BFS(S);

    for(int i = 0; i < N; i++){
        if(cost[i] == INT_MAX){
            fout << "-1" << " ";
        }
        else{
            fout << cost[i] << " ";
        }
    }

    fout << "\n";
    fout.close();

    return 0;
}