Cod sursa(job #2967265)

Utilizator Stefan43Cozma Stefan Stefan43 Data 19 ianuarie 2023 11:09:11
Problema Parcurgere DFS - componente conexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.26 kb
#include <fstream>
#include <vector>
#define NMAX 1000002

using namespace std;

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

void citire();
void dfs (int x);
void afisare();

vector<int> G[NMAX];
int n, nrc, m;
int d[NMAX];
int uz[NMAX]; //uz[i]=x daca i a fost vizitat in componenta conexa x

int main()
{
    int i;
    citire();
    for (i=1;i<=n;i++)
    {
        if (uz[i]==0) //am identificat o noua componenta conexa
        {
            nrc++;
            dfs(i);
        }
    }
    afisare();
    return 0;
}

void citire()
{
    int x, y, i;
    fin>>n>>m;
    for (i=1;i<=m;i++)
    {
        fin>>x>>y;
        G[y].push_back(x);
        G[x].push_back(y);
    }
}

void dfs (int x) //parcurg graful incepand din vf. x
{
    int i;
    uz[x]=nrc;      //il marchez pe x ca vizitat
    //parcurg toti vecinii lui x in ordine din lista de adiacenta
    for (i=0;i<G[x].size();i++)
    {
        if (!uz[G[x][i]]) dfs(G[x][i]);
    }
}

void afisare()
{
    //int i, j;
    fout<<nrc<<'\n';
/*    for (i=1;i<=nrc;i++) //afisez varfurile care sunt in comp. conexa cu numarul
    {
        for (j=i;j<=n;j++)
        {
            if (uz[j]==i) fout<<j<<' ';
        }
        fout<<'\n';
    } */
}