Pagini recente » Cod sursa (job #58232) | Cod sursa (job #1610046) | Cod sursa (job #264936) | Cod sursa (job #1483643) | Cod sursa (job #2792849)
#include <bits/stdc++.h>
using namespace std;
ifstream in("dfs.in");
ofstream out("dfs.out");
const int MAX = 100001;
class Graf
{
int NrNoduri;
vector<int> Adiacenta[MAX];
public:
Graf(int NrNoduri);
void AdaugaMuchie(int nod, int nodConectat);
void Dfs(int nod, bool Vizitat[MAX]);
int DfsCompCnx (int nod, bool Vizitat[MAX]);
};
Graf::Graf(int NrNoduri)
{
this->NrNoduri = NrNoduri;
}
void Graf::AdaugaMuchie(int nod, int nodConectat)
{
Adiacenta[nod].push_back(nodConectat); /// Adauga elementul la lista lui v.
}
void Graf::Dfs(int nod, bool Vizitat[MAX]) //ca param si vectoru de vizitate
{
Vizitat[nod] = 1;
for (auto i: Adiacenta[nod])
if (!Vizitat[i])
{
Dfs(i, Vizitat);
}
}
int Graf::DfsCompCnx (int nod, bool Vizitat[MAX])
{
int total = 0;
for(int i = 0; i < NrNoduri; i++)
if(!Vizitat[i])
{
Dfs(i, Vizitat);
total++;
}
return total;
}
int main()
{
int N, M;
in >> N >> M;
Graf g(N+1);
int x, y;
for(int i = 0; i < M; i++)
{
in >> x >> y;
g.AdaugaMuchie(x, y);
}
bool Vizitat[MAX] = {0};
g.Dfs(0, Vizitat);
out << g.DfsCompCnx(0, Vizitat);
return 0;
}