/*
Implementación iterativa DFS
https://g...content-available-to-author-only...b.com/orendon/01cf8cd0794f7869ce16d152c0131c79
A
/ \
B E
/ \ / \
C D F G
*/
let stack = []
let visited = {} // para marcar los nodos que ya visitamos
const adjacency_list = { // guardamos los "vecinos/hijos" de cada nodo
'A': ['B', 'E'],
'B': ['C', 'D'],
'C': [],
'D': [],
'E': ['F', 'G'],
'F': [],
'G': [],
}
function dfs(origin){
stack.push(origin);
while(stack.length > 0){
const node = stack.pop();
console.log(node);
for(const child of adjacency_list[node]) {
if (!visited[child]){
stack.push(child);
}
};
}
}
dfs('A');
LyoKSW1wbGVtZW50YWNpw7NuIGl0ZXJhdGl2YSBERlMKaHR0cHM6Ly9nLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5iLmNvbS9vcmVuZG9uLzAxY2Y4Y2QwNzk0Zjc4NjljZTE2ZDE1MmMwMTMxYzc5CgkJCSAgICAgQQoJCQkgIC8gICAgIFwKCQkJQiAgICAgICAgIEUKCQkgIC8gICBcICAgICAgLyAgXAoJCSBDICAgICBEICAgIEYgICAgRwoqLwoKbGV0IHN0YWNrID0gW10KbGV0IHZpc2l0ZWQgPSB7fQkJCQkvLyBwYXJhIG1hcmNhciBsb3Mgbm9kb3MgcXVlIHlhIHZpc2l0YW1vcwpjb25zdCBhZGphY2VuY3lfbGlzdCA9IHsJCS8vIGd1YXJkYW1vcyBsb3MgInZlY2lub3MvaGlqb3MiIGRlIGNhZGEgbm9kbwoJJ0EnOiBbJ0InLCAnRSddLAoJJ0InOiBbJ0MnLCAnRCddLAoJJ0MnOiBbXSwKCSdEJzogW10sCgknRSc6IFsnRicsICdHJ10sCgknRic6IFtdLAoJJ0cnOiBbXSwKfQoKZnVuY3Rpb24gZGZzKG9yaWdpbil7CglzdGFjay5wdXNoKG9yaWdpbik7CgkKCXdoaWxlKHN0YWNrLmxlbmd0aCA+IDApewoJCWNvbnN0IG5vZGUgPSBzdGFjay5wb3AoKTsKCQljb25zb2xlLmxvZyhub2RlKTsKCQkKCQlmb3IoY29uc3QgY2hpbGQgb2YgYWRqYWNlbmN5X2xpc3Rbbm9kZV0pIHsKCQkJaWYgKCF2aXNpdGVkW2NoaWxkXSl7CgkJCQlzdGFjay5wdXNoKGNoaWxkKTsKCQkJfQoJCX07Cgl9Cn0KCgpkZnMoJ0EnKTsK