Cod sursa(job #2831989)

Utilizator Teodor_AxinteAxinte Teodor-Ionut Teodor_Axinte Data 12 ianuarie 2022 17:11:50
Problema Parcurgere DFS - componente conexe Scor 95
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.71 kb
#include <bits/stdc++.h>

using namespace std;

const int N= 100010;

class Graf
{
private:
    int noduri , muchii;

    void dfs(int start,vector<int> v[N], vector<int> &viz);


    public:
    Graf(int,int);
    void add_edge(int x, int y);
    int nr_connected_components(vector<int> v[N], vector<int> viz);
   
};

Graf::Graf(int n, int m)
{
    (*this).noduri = n;
    (*this).muchii = m;

    cout<<"Constructor " << n<<" "<<m<<'\n';
}

void Graf::dfs(int start, vector<int> v[N], vector<int> &viz)
{
    viz[start] = 1;
    for(auto it : v[start])
        if(!viz[it])
            dfs(it,v,viz);
    
}

int Graf::nr_connected_components(vector<int> v[N], vector<int> viz)  {
    int ct=0;
    for(int i=1;i<=(this->noduri);i++)
        if(!viz[i]){
            dfs(i,v,viz);
            ct++;
        }
    return ct;
}



int main()
{
    int problema = 1;
    if(problema == 1)
    {
        ifstream fin("dfs.in");
        ofstream fout("dfs.out");
        int n,m;
        fin>>n>>m;
        vector<int> adj[n+5] = {};
        vector<int> viz(n+5,0);
        for(auto it:viz)
            cout<<it<<" ";
        cout<<'\n';
        for(int i=1;i<=m;i++)
        {
            int x,y;
            fin>>x>>y;
            adj[x].push_back(y);
            adj[y].push_back(x);
        }
        for(int i=1;i<=n;i++)
            if(adj[i].size())
                {
                    cout<<i<<" : ";
                    for(auto it : adj[i])
                        cout<<it<<" ";
                    cout<<'\n';
                }
        cout<<"-----------------\n\n";

        Graf G (n,m);
        fout<<G.nr_connected_components(adj,viz);
    }


}