Cod sursa(job #3269836)

Utilizator alexmihaibercaruBercaru Alexandru-Mihai alexmihaibercaru Data 21 ianuarie 2025 01:50:27
Problema Parcurgere DFS - componente conexe Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.67 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;

/*
    Se da un graf neorientat cu N noduri si M muchii.
    Sa se determine numarul componentelor conexe ale grafului.

    ---dfs.in---
        6 3
        1 2
        1 4
        3 5
*/

int inf = 2147483647;
int nrNoduri, nrMuchii, s, x;
vector<int> viz, dist, tata;

vector<vector<int>> MemoGrafLista(int tip){
    int i, j;
    ifstream fin;
    fin.open("dfs.in");
    fin >> nrNoduri >> nrMuchii;
    vector<vector<int>> liste_adiacenta(nrNoduri + 1);
    for (int cnt = 0; cnt < nrMuchii; cnt++) {
        fin >> i >> j;
        liste_adiacenta[i].push_back(j);
        if(tip == 0)
            liste_adiacenta[j].push_back(i);
    }

    for(int nod = 1; nod <= liste_adiacenta.size() - 1; nod++){
        sort(liste_adiacenta[nod].begin(), liste_adiacenta[nod].end());
    }
    return liste_adiacenta;   
}

void DFS(std::vector<std::vector<int>> &graf, int start)
{
    viz[start] = 1;
    for(auto vecin : graf[start])
    {
        if(viz[vecin] == 0)
        {
            tata[vecin] = start;
            DFS(graf, vecin);
        }
    }
}

int main()
{
    vector<vector<int>> listeAdiacenta;
    listeAdiacenta = MemoGrafLista(0);
    int componente_conexe = 0;

    viz.assign(listeAdiacenta.size(), 0);
    tata.assign(listeAdiacenta.size(), 0);

    for(int nod = 1; nod <= nrNoduri; nod++)
    {
        if(viz[nod] == 0)
        {
            DFS(listeAdiacenta, nod);
            componente_conexe ++;
        }
    }
    ofstream g("dfs.out");
    g << componente_conexe;

    return 0;
}