Cod sursa(job #2789330)

Utilizator almar.fetaFeta Almar almar.feta Data 27 octombrie 2021 13:42:47
Problema Parcurgere DFS - componente conexe Scor 40
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.71 kb
#include <fstream>
#include <vector>
#include <stack>

using namespace std;

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

void DFS(int start, vector <int> &viz, int nr_noduri, int nr_muchii, vector <pair<int,int>> lista_muchii) {
        stack <int> dfs_tree;

        dfs_tree.push(start);
        viz[start] = 1;

        while (!dfs_tree.empty()) {
            int nod_curent = dfs_tree.top();
            int vecin = 0;
            for(int i=0; i<nr_muchii; i++)
                if (lista_muchii[i].first == nod_curent && viz[lista_muchii[i].second] == 0) {
                    vecin = lista_muchii[i].second;
                    break;
                }
                else if (lista_muchii[i].second == nod_curent && viz[lista_muchii[i].first] == 0) {
                    vecin = lista_muchii[i].first;
                    break;
                }
            if (vecin == 0)
                dfs_tree.pop();
            else {
                dfs_tree.push(vecin);
                viz[vecin] = 1;
            }
        }
}

void comp_conexe(int nr_noduri, int nr_muchii, vector <pair<int,int>> lista_muchii) {
    vector <int> viz;
    for (int i = 0; i <= nr_noduri; i++)
        viz.push_back(0);

    int nr_comp = 0;

    for(int i=1; i<=nr_noduri; i++)
        if(viz[i] == 0) {
            DFS(i, viz,nr_noduri,nr_muchii,lista_muchii);
            nr_comp++;
        }

    out << nr_comp;
}

int main()
{
    int n,m,s;
    vector <pair<int,int>> v;

    in >> n >> m >> s;
    for(int i=0; i<m; i++)
    {
        int x,y;
        in >> x >> y;
        v.push_back(make_pair(x,y));
    }

    comp_conexe(n,m,v);

    in.close();
    out.close();
    return 0;
}