Cod sursa(job #2780168)

Utilizator alexandra_udristoiuUdristoiu Alexandra Maria alexandra_udristoiu Data 6 octombrie 2021 11:12:35
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.85 kb
#include<fstream>
#include<vector>
#include<queue>
using namespace std;

class Graf {
    int n;
    int m;
    vector<int> v[100002];
    bool viz[100002];
public:
    Graf(int n, int m, pair<int, int> muchii[]);
    int nrComponenteConexe();
    vector<int> bfs(int srs);
private:
    void dfs(int nod);
};

Graf :: Graf(int n, int m, pair<int, int> muchii[]) {
    this->n = n;
    this->m = m;
    for (int i = 1; i <= m; i++) {
        v[ muchii[i].first ].push_back(muchii[i].second);
    }
}
int Graf :: nrComponenteConexe() {
    for (int i = 1; i <= n; i++) {
        viz[i] = false;
    }
    int nr = 0;
    for (int i = 1; i <= n; i++) {
        if (!viz[i]) {
            nr++;
            dfs(i);
        }
    }
    return nr;
}
void Graf :: dfs(int nod) {
    viz[nod] = true;
    for (int i = 0; i < v[nod].size(); i++) {
        if (!viz[ v[nod][i] ]) {
            dfs(v[nod][i]);
        }
    }
}
vector<int> Graf :: bfs(int srs) {
    vector<int> dist;
    dist.resize(n + 1);
    for (int i = 1; i <= n; i++) {
        dist[i] = -1;
    }
    queue<int> q;
    q.push(srs);
    dist[srs] = 0;
    while (!q.empty()) {
        int nod = q.front();
        for (int i = 0; i < v[nod].size(); i++) {
            int vecin = v[nod][i];
            if (dist[vecin] == -1) {
                dist[vecin] = dist[nod] + 1;
                q.push(vecin);
            }
        }
        q.pop();
    }
    return dist;
}

int n, m, i, srs;
pair<int, int> muchii[1000005];
ifstream fin ("bfs.in");
ofstream fout("bfs.out");
int main() {
    fin>> n >> m >> srs;
    for (i = 1; i <= m; i++) {
        fin>> muchii[i].first >> muchii[i].second;
    }
    Graf* graf = new Graf(n, m, muchii);
    vector<int> dist = graf->bfs(srs);
    for (int i = 1; i <= n; i++) {
        fout<< dist[i] <<" ";
    }
}