Cod sursa(job #2793591)

Utilizator gogurazvanRazvan Gogu gogurazvan Data 3 noiembrie 2021 19:30:32
Problema Parcurgere DFS - componente conexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.78 kb
#include<bits/stdc++.h>

using namespace std;
ifstream in("dfs.in");
ofstream out("dfs.out");
const int nmax = 100001;

class Graf{
    int n, m;
    vector<int> vecin[nmax];


    void recursieDFS(int nod, bool vizitat[]){
        vizitat[nod]=true;
        for(int i=0; i<vecin[nod].size(); ++i)
            if(vizitat[vecin[nod][i]]==false)
                recursieDFS(vecin[nod][i], vizitat);

    };

public:

    Graf(int n, int m){
        this->n=n;
        this->m=m;
    }

    void citireM( int m, bool orient ){
        for( int i=0; i<m; ++i ){

            int a, b;  in >> a >> b;
            vecin[a].push_back(b);
            if( orient == false ) vecin[b].push_back(a);
        }
    }

    void DFS(){

        int nr_comp_conex=0;
        bool vizitat[n];

        for(int i=1;i<=n;++i)
            vizitat[i]=false;

        for(int i=1;i<=n;++i){
            if(vizitat[i]==false){
                recursieDFS(i,vizitat);
                nr_comp_conex++;
            }
        }
        out<<nr_comp_conex;

    }

    void BFS(int s){

        int drum[n+1];

        for(int i=1;i<=n;++i)
            drum[i]=-1;

        drum[s]=0;
        queue <int> poz;
        poz.push(s);

        while(!poz.empty()){
            int nod=poz.front();
            for(int i=0; i<vecin[nod].size(); ++i){
                if( drum[vecin[nod][i]] == -1 ){
                    poz.push( vecin[nod][i] );
                    drum[vecin[nod][i]]=drum[nod]+1;
                }
            }
            poz.pop();
        }

        for(int i=1;i<=n;++i)
            out<<drum[i]<<" ";

    }

};



int main()
{
    int n,m,s;
    in>>n>>m;

    Graf g(n,m);

    g.citireM(m,false);
    g.DFS();

    return 0;
}