μ΄λ²μλ dfs μμ νμμ ν΅νμ¬ λ€λ₯Έλ¬Έμ λ₯Ό νμ΄λ³΄μλ€.
const graph = {
0: [1, 2, 4],
1: [0, 5],
2: [0, 5],
3: [4],
4: [0, 3],
5: [1, 2],
};
function dfs(graph, start) {
// λ°©λ¬Ένλμ§ μ²΄ν¬
const visited = Array(6).fill(false);
// μ²μ μμ μ€ν μ€μ ( λ°°μ΄μ μΈμμ ꡬμ±μ [νμλ
Έλ,λΆλͺ¨λ
Έλ] λ‘ κ΅¬μ±)
const stack = [[start, -1]];
// λ°©λ¬Έν λ
Έλλ₯Ό μμμ λ§κ² μ λ ¬
const result = [];
// TODO : μ€νμ μ무 λ°μ΄ν°λ μμλκΉμ§ νμνκΈ°
while (stack.length) {
// currentNoda μ parentNode λ₯Ό μ€νμ λ°μ΄ν°κ°μΌλ‘ μ€μ
let [currentNode, parentNode] = stack.pop();
// μ²μμ μ΄λΆλΆμ μ μΈνκ³ λ¬Έμ λ₯Ό νμ΄μ 무ν루νμ λ€μ΄κ°μ,,
if (visited[currentNode]) {
continue;
}
// μ΄μ νμμ νμΌλ, νμμ νλ€κ³ νμνκ³ popμ νλκ² μ볡
visited[currentNode] = true;
stack.push([currentNode, parentNode]);
// λ°©λ¬Έν λ
Έλλ₯Ό νμμμλλ‘ push
result.push(currentNode);
// μ νν λ
Έλμ value μ€μ νμνμ§ μμ λ
Έλλ€μ μ λΆ μ€νμ push νλ€.
for (const node of graph[currentNode]) {
if (!visited[node]) stack.push([node, currentNode]);
}
//μ΄μ λμ΄μ νμν λ
Έλκ° μλ€λ©΄ μ’
λ£.
}
return result;
}
console.log(dfs(graph, 0));
[ 0, 4, 3, 2, 5, 1 ]