Cod sursa(job #3213521)

Utilizator antonio.grGrigorascu Andrei Antonio antonio.gr Data 13 martie 2024 11:04:20
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include<iostream>
#include<fstream>
#include<vector>
#include<array>
#include<queue>

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

const int limita = 100005;

std::queue<int> coada;
std::vector<int> graph[limita];
int distanta[limita];
int M,N,start;

void BFS(){
    int nod, vecin;
    while(!coada.empty()){
        nod = coada.front();
        coada.pop();
        for(unsigned int i = 0; i < graph[nod].size(); i++){ // parcurgere vecini
            vecin = graph[nod][i];
            if(distanta[vecin] == -1){ // nodul nu a fost vizitat
                coada.push(vecin);
                distanta[vecin] = distanta[nod] + 1; 
            }
        }
    }
}

int main(){

    fin>>N>>M>>start;
    for(int i = 1; i<= M; i++){
        int x, y;
        fin>>x>>y;
        graph[x].push_back(y);  // lista de vecini, graf orientat
    }
    for(int i = 1; i <= N; i++){  // prentru toate nodurile, distanta initiala este -1
        distanta[i] = -1;
    }
    distanta[start] = 0;  // incepem cu nodul de start, deci distanta initiala este 0
    coada.push(start);
    BFS();

    for(int i = 1; i<= N; i++){
        fout<<distanta[i]<<" ";
    }

    return 0;
}