Merge pull request #32 from dcariotti/patch-1

DFS with stack
This commit is contained in:
Christian Bender 2017-12-29 21:05:56 +01:00 committed by GitHub
commit f72022b3cc
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

53
Graph/DFS_with_stack.cc Normal file
View File

@ -0,0 +1,53 @@
#include <iostream>
#include <list>
#include <stack>
#define WHITE 0
#define GREY 1
#define BLACK 2
#define INF 99999
using namespace std;
int checked[999] = {WHITE};
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;
}