diff --git a/Graph/DFS_with_stack.cc b/Graph/DFS_with_stack.cc new file mode 100644 index 000000000..37ee50a5f --- /dev/null +++ b/Graph/DFS_with_stack.cc @@ -0,0 +1,53 @@ +#include +#include +#include + + +#define WHITE 0 +#define GREY 1 +#define BLACK 2 +#define INF 99999 + +using namespace std; + +int checked[999] = {WHITE}; + +void dfs(const list lista[], int start) { + stack 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 lista[INF]; + for(int i = 0; i < n; ++i) { + cin >> u >> w; + lista[u].push_back(w); + } + + dfs(lista, 0); + + + return 0; +}