Cod sursa(job #2789434)

Utilizator Octavian21Chiriac Octavian Octavian21 Data 27 octombrie 2021 15:37:20
Problema BFS - Parcurgere in latime Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.25 kb
#include <bits/stdc++.h>

using namespace std;

class Graf
{
    int n , m;
    vector <vector <int>> drum;

    public:
        Graf(int n, int m, vector <vector <int>> drum);
        vector<int> bfs(int nod);
        void dfs(int nod,bool viz[]);
        int compCon();
};

Graf :: Graf(int n, int m, vector <vector <int>> drum)
{
    this-> n = n;
    this-> m = m;
    this -> drum = drum ;

}


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

vector <int> Graf :: bfs(int nod)
{
    vector <int> dist;

    queue <int> coada;

    for(int i=0; i<=n; ++i)
    {
        dist.push_back(-1);

    }
    coada.push (nod);

    dist[nod] = 0;

    while(!coada.empty())
    {
        int p = coada. front();
        for(int i=0; i<drum[p].size(); ++i)
        {
            if( dist[drum[p][i]] == -1)
            {
                dist[drum[p][i]] = dist[p] + 1;
                coada. push(drum[p][i]);
            }
        }
        coada.pop();
    }
    return dist;
}


int Graf :: compCon()
{
    int nrComp = 0;
    bool* viz = new bool[n+1];
    for(int i = 0; i<=n; ++i)
    {
        viz[i] = false;
    }
    for(int i = 1; i<= n; ++i)
    {
        if(viz[i] == false)
        {
            dfs(i, viz);
            nrComp++;
        }
    }
    return nrComp;

}

void Graf :: dfs(int nod,bool viz[])
{
    viz[nod] = true;
    for(int i = 0; i <drum[nod].size(); ++i)
    {
        if(viz[drum[nod][i]] == false)
        {
            viz[drum[nod][i]] = true;
            dfs(drum[nod][i],viz);
        }
    }
}


void p2()
{

    int n,m,x,y;
    fin>>n>>m;
    vector <vector <int>> drum (n+1);

    for(int i =0; i<m; ++i)
    {
        fin>>x>>y;
        drum[x].push_back(y);
        drum[y].push_back(x);
    }
    Graf g1 = Graf(n,m,drum);
    int r = g1.compCon();
    fout<<r;

}

void p1()
{
    int n,m,nod, x, y;
    fin>>n>>m>>nod;
    vector <vector <int>> drum (n+1);



    for(int i=0;i<m; ++i)
    {
        fin>>x>>y;
        drum[x].push_back(y);
    }

    Graf g(n,m,drum);
    vector<int> r = g.bfs(nod);

    for(int i = 1;i<=n; ++i)
        fout<<r[i]<<" ";
}


int main()
{
    p1();
    //p2();
    return 0;
}