Pagini recente » Cod sursa (job #1949353) | Cod sursa (job #2221201) | Cod sursa (job #1719105) | Cod sursa (job #3184795) | Cod sursa (job #1678417)
#include <iostream>
#include <fstream>
#include <utility>
#include <algorithm>
#include <set>
#include <vector>
#include <stack>
#include <queue>
using namespace std;
ifstream f("dfs.in");
ofstream g("dfs.out");
int **A, *Viz;
int nr, n , m;
void df(int start, int **A, int *&Viz){
int i, x, *viz = new int [n+1];
stack <int> S;
for(i=0; i<=n ;i++){
viz[i] = 0;
}
S.push(start);
while(!S.empty()){
x = S.top();
S.pop();
if(!viz[x]){
viz[x] = 1;
Viz[x] = 1;
for(i=n; i>=1; i--){
if(A[x][i] && !viz[i]){
S.push(i);
}
}
}
}
}
int main (){
int x, y, i, j, nod = 1;
f>>n;
f>>m;
Viz = new int [n+1];
for(i=0; i<=n ;i++){
Viz[i] = 0;
}
A = new int * [n+1];
for(i=1; i<=n; i++){
A[i] = new int [n+1];
}
for(i=1; i<=m ;i++){
f>>x>>y;
A[x][y] = A[y][x] = 1;
}
nod = 1;
while(nod <= n){
if(!Viz[nod]){
df(nod, A, Viz);
nr = nr + 1;
}
nod = nod + 1;
}
g<<nr;
return 0;
}