Pagini recente » Cod sursa (job #2393242) | Cod sursa (job #2288485) | Cod sursa (job #1959619) | Cod sursa (job #2754171) | Cod sursa (job #2789330)
#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;
}