Cod sursa(job #3157167)

Utilizator ncralucaNegoita-Cretu Raluca-Marina ncraluca Data 14 octombrie 2023 15:49:57
Problema Parcurgere DFS - componente conexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.58 kb
///df.ex1 - cate comp conexe sunt; cu liste si cu dfs
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>

using namespace std;

const int nmax=100000;
vector<int> G[nmax+1]; ///g[i] = lista nodurilor cu care are muchie i
int vis[nmax+1]; ///vis [i] = 0, nod nevizitat; 1 = nod vizitat pt DFS

void dfs(int x)
{
    vis[x]=1; //se marcheaza ca fiind vizitat
    for(auto next: G[x]) //se parcurge lista de adiacenta a nodului x pt a-i gasi vecinii
    {
        if(!vis[next]) //daca e vecin nevizitat e urmatorul pe care se aplica DFS
            dfs(next);
    }
}

int main()
{
    ifstream f("dfs.in");
    ofstream g("dfs.out");
    int n,m; /// n= nr noduri, m = nr muchii
    f>>n>>m;
    for(int i=1;i<=m;i++)
    {
        int x,y;
        f>>x>>y;
        G[x].push_back(y); //adaugam in lista de adiacenta a lui x: nodul y
        G[y].push_back(x); //adaugam si in lista lui y: nodul x (e graf neorientat)
    }
    int cnt=0; //nr de comp conexe
    for(int i=1;i<=n;i++)
    {
        if(!vis[i]) //in momentul in care dai de un nod care nu a fost vizitat inseamna ca dai de o componenta conexa noua( pe parcursul alg de DFS se
                                                                    //marcheaza ca fiind vizitate nodurile din aceeasi comp conexa cu cel gasit nevizitat

        {
            cnt++; //crestem nr de comp conexe
            dfs(i); //pornim parcurgerea dfs pt a gasi toata componenta conexa si sa avem toate nodurile din componenta marcate ca fiind vizitate
        }
    }
    g<<cnt;
}