Cod sursa(job #2813541)

Utilizator AndreeaCreitaCreita Andreea AndreeaCreita Data 6 decembrie 2021 21:51:48
Problema BFS - Parcurgere in latime Scor 70
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.02 kb
#include <bits/stdc++.h>
using namespace std;

#define maxi 100005

ifstream in("bfs.in");
ofstream out("bfs.out");
class Graf
{

   int n,m; //n- nr noduri, m- nr muchii
   int x,y; //muchie stg-dr

   int viz[100005]; //pt dfs
   vector<int> *l;



   public:
       Graf();
       void citireDFS();
       void dfs(int s);
       void nrCompCone();
       int citireBFS();
       void bfs(int s);




};

Graf::Graf() {
    n = m = x = y = 0;
    l = new vector<int>[maxi];
    //l2 = new vector<int>[maxi];
}


void Graf::citireDFS()
{
    in>>n>>m;
    int x,y;
    for(int i =0; i<m; i++)
    {
        in>>x>>y;
        l[x].push_back(y);
        l[y].push_back(x);
    }
}
void Graf:: dfs(int s)
{
    viz[s]=1;
    for(auto el:l[s])
    {
        if(viz[el]==0)
        {
            dfs(el);
        }
    }
}

void Graf::nrCompCone()
{
    int c_con=0;
    for(int i=1; i<=n; i++)
    {
        if(viz[i]==0)
        {
            dfs(i);
            c_con++;
        }
    }
    out<<c_con;
}


int Graf :: citireBFS()
{
    int s;
    in>>n>>m>>s;

    int x,y;
    for(int i =0; i<m; i++)
    {
        in>>x>>y;
        l[x].push_back(y);
    }
    return s;
}

void Graf::bfs(int s)
{

    //int vizitat[10000];
    queue<int> q;
    int dist[100005];
    for(int i =1; i<=n; i++)
    {
        dist[i]=-1;
    }
    int v;
    q.push(s);
    viz[s] = 1;
    dist[s]=0;
    while(!q.empty())
    {

        v=q.front();
        for(auto el:l[v])
        {

            if(viz[el]==0)
            {
                q.push(el);
                viz[el]=1;
                dist[el]=dist[v]+1;

            }

        }
        q.pop();
    }


    for(int i = 1; i<=n; i++)
    {

        out << dist[i]<<' ';
    }

}


int main()
{

    int ss;
    Graf g2;
    ss=g2.citireBFS();
    g2.bfs(ss);
    //g2.afisBfs();
    /*
    Graf g1;
    g1.citireDFS();

    g1.nrCompCone();
    */
    return 0;
}