Cod sursa(job #2797901)

Utilizator pizzandreeaCiurescu Andreea pizzandreea Data 10 noiembrie 2021 18:47:35
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.81 kb
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
 
#define MAX 100001
using namespace std;
ifstream fin("bfs.in");
ofstream fout("bfs.out");
 
class Graf{
    public:
        // date membre
        vector <int> A[MAX]; //lista de adiacenta
        int mN, mM; // noduri si muchii
 
 
        // constructor
        Graf(int N, int M){
            mN = N;
            mM = M;
        }
        
        void CitireG(){
            int x, y;
 
            for(int i = 1; i <= mM; i++){
                fin >> x >> y;
                A[x].push_back(y);
            }
        }
 
        void BFS(int start);
};
 
 
void Graf :: BFS(int start){
    int x;
    bool viz[MAX] = {0};
    queue <int> Q;
    // int pr, ul;
    // pr = 1;
    // ul = 0;
 
    int lg[MAX] = {0};  // lungimea drumului
 
    // vizitam nodul curent
    viz[start] = 1;
    // il punem in coada
    Q.push(start);
 
    // fout<<1; 
    while ( !Q.empty() ){
        x = Q.front();
        Q.pop();
        // preluam primul element din coada apoi il eliminam din coada
 
        for(int i = 0; i < A[x].size(); i++){
            // parcurgem toti vecinii lui x
            if(viz[A[x][i]] == 0){   // daca nu am mai vizitat vecinul asta{
                Q.push(A[x][i]);
 
                // il vizitam
                viz[A[x][i]] = 1;
                // creste lungimea drumului
                lg[A[x][i]] = lg[x] + 1;
 
            }
        }
    }
 
    for(int i = 1; i <= mN; i++)
        if(viz[i] != 0)
            fout << lg[i] << " ";
        else
            fout << -1 << " ";
 
}
 

 
int main(){
    
    int N, M, S;
    int x,y;
 
    fin >> N >> M >> S;
    // fout << 1;
    Graf G(N,M);
    G.CitireG();
    G.BFS(S);
 
 
    return 0;
}