Pagini recente » Cod sursa (job #2252753) | Cod sursa (job #1805675) | Cod sursa (job #691275) | Cod sursa (job #495838) | Cod sursa (job #1181146)
#include <iostream>
#include <fstream>
#include <vector>
#include <stack>
#include <stdlib.h>
using namespace std;
/* dfs - componente conexe */
int main() {
ifstream in;
in.open("dfs.in");
ofstream out;
out.open("dfs.out");
int N, M, i, nod, n1, n2, vecin, k = 0;
in >> N >> M;
vector<int> graf[N + 1];
int *sortat = (int*)calloc(N + 1, sizeof(int));
int *visited = (int*)calloc(N + 1, sizeof(int));
vector<int>::iterator it;
stack<int> s;
for (i = 0; i < M; i++) {
in >> n1 >> n2;
if (n1 != n2) {
graf[n1].push_back(n2);
graf[n2].push_back(n1);
}
}
for (i = 1; i <= N; i++) {
if (visited[i] == 0) {
visited[i] = 1;
s.push(i);
while (!s.empty()) {
nod = s.top();
vecin = -1;
for (it = graf[nod].begin(); it != graf[nod].end(); it++) {
if (visited[*it] == 0) {
vecin = *it;
break;
}
}
if (vecin != -1) { // daca exista vecin
visited[vecin] = 1;
s.push(vecin);
}
else {
visited[nod] = -1;
sortat[k] = nod;
k++;
s.pop();
}
}
}
}
//out << contor;
for (i = 1; i <= N; i++)
out << sortat[i] << " ";
in.close();
out.close();
return 0;
}