TheAlgorithms-C-Plus-Plus/graph/dfs_with_stack.cpp
2020-08-03 01:50:47 -07:00

50 lines
939 B
C++

#include <iostream>
#include <list>
#include <stack>
#define WHITE 0
#define GREY 1
#define BLACK 2
#define INF 99999
using namespace std;
void dfs(const list<int> lista[], int start) {
stack<int> stack;
int checked[999] = {WHITE};
stack.push(start);
checked[start] = GREY;
while (!stack.empty()) {
int act = stack.top();
stack.pop();
if (checked[act] == GREY) {
cout << act << ' ';
for (auto it = lista[act].begin(); it != lista[act].end(); ++it) {
stack.push(*it);
if (checked[*it] != BLACK)
checked[*it] = GREY;
}
checked[act] = BLACK; // nodo controllato
}
}
}
int main() {
int u, w;
int n;
cin >> n;
list<int> lista[INF];
for (int i = 0; i < n; ++i) {
cin >> u >> w;
lista[u].push_back(w);
}
dfs(lista, 0);
return 0;
}