Cod sursa(job #2797866)

Utilizator jaha01Jahaleanu Vlad-Gabriel jaha01 Data 10 noiembrie 2021 18:09:04
Problema Parcurgere DFS - componente conexe Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 2.27 kb
#include <iostream>
#include <bits/stdc++.h>

using namespace std;

ifstream f("bfs.in");
ofstream g("bfs.out");
ifstream fin("dfs.in");
ofstream gout("dfs.out");

class Graf
{
    int nrNoduri;
    int nrMuchii;
    int start;
    vector <int> adj[100001];


public:

    void citire_orientat();
    void BFS();
    void citire_neorientat();
    void DFS();
    void DFS_helper(int, vector <bool>&);

};

void Graf::citire_orientat()
{
    int first, second;

    f>>nrNoduri;
    f>>nrMuchii;
    f>>start;

    for(int i = 0; i < nrMuchii; i++)
    {
        f>>first>>second;
        adj[first].push_back(second);
    }
}

void Graf::citire_neorientat()
{
    int first, second;
    fin>>nrNoduri>>nrMuchii;
    for(int i = 0; i < nrMuchii; i++)
    {
        fin>>first>>second;
        adj[first].push_back(second);
        adj[second].push_back(first);

    }
}

void Graf::BFS()
{
    queue <int> coada;
    coada.push(start);
    bool visited[100001] = {};
    visited[start] = 1;
    int cost[100001] = {};
    cost[start] = 0;

    int nodCrt;

    while (coada.size())
    {
        nodCrt = coada.front();

        for(int i = 0; i < adj[nodCrt].size(); i++)
        {
            if(!visited[adj[nodCrt][i]])
            {
                coada.push(adj[nodCrt][i]);
                cost[adj[nodCrt][i]] = cost[nodCrt] + 1;
                visited[adj[nodCrt][i]] = 1;
            }
        }
        coada.pop();
    }

    for(int i = 1; i <= nrNoduri; i++)
    {
        if(visited[i] == 1)
            g<<cost[i]<<" ";
        else
            g<<"-1 ";
    }


}

void Graf::DFS()
{
    vector <bool> visited(100);
    int nrCompConexe = 0;

    for (int i = 1; i <= nrNoduri; i++)
    {
        if(!visited[i])
        {
            DFS_helper(i, visited);
            nrCompConexe += 1;
        }
    }

    gout<<nrCompConexe;

}


void Graf::DFS_helper(int s, vector<bool>& visited)
{
    visited[s] = 1;

    for (int i = 0; i < adj[s].size(); i++)
    {
        if(!visited[adj[s][i]])
            DFS_helper(adj[s][i], visited);
    }
}

int main()
{
    Graf G;

    //G.citire_orientat();
    //G.BFS();

    G.citire_neorientat();
    G.DFS();

    return 0;
}