Cod sursa(job #2798181)

Utilizator CalinCruceanu3576Cruceanu CalinCruceanu3576 Data 10 noiembrie 2021 23:34:49
Problema BFS - Parcurgere in latime Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.31 kb
#include <bits/stdc++.h>
 
using namespace std;
 
ifstream fin( "bfs.in" );
ofstream fout( "bfs.out" );
 
class Graf {
private:

    int N;                   
    vector< vector<int> > adc;
    vector<int> dist;

    void Bfs(int nod);
      
public:

    Graf(int n);
    void AdaugaMuchie(int x, int y);
    void Distanta(int nod);
};

void Graf :: Bfs(int nod) {
    int i, w, pr;
    queue <int> Q;
    for(i = 1; i <= N; i++)
        dist[i] = -1;
    dist[nod] = 0;
    Q.push(nod);
    while(!Q.empty()) {
        pr = Q.front();
        Q.pop();
        for(i = 0; i < adc[pr].size(); i++) {
              w = adc[pr][i];
              if(dist[w] == -1) {
                    dist[w] = dist[pr] + 1;
                    Q.push(w);
                }
            }
        }
}

Graf :: Graf(int n) {
  N = n;
  adc.resize( n + 1 );
  dist.resize( n + 1 );
}

void Graf :: AdaugaMuchie(int x, int y) {
  adc[x].push_back(y);
  adc[y].push_back(x);
}

void Graf :: Distanta(int s) {
    int i;
    Bfs(s);
    for(i = 1; i <= N; i++) 
        fout<<dist[i]<<" ";
}

int main()
{
    int n, m ,s, x, y, i;
    fin>>n>>m>>s;
    Graf G(n);
    for(i = 1; i <= m; i++) {
        fin >> x >> y;
        G.AdaugaMuchie(x, y);
    }
    G.Distanta(s);
    return 0;
}