μ½λ©ν μ€νΈ μ€λΉνκΈ° μμ, DFS μ λν κ°λ μ μ‘κ³ μ ν μ€νΈ ν΄λ³΄μλ€.
const graph = {
A: ["B", "C"],
B: ["A", "D"],
C: ["A", "G", "H", "I"],
D: ["B", "E", "F"],
E: ["D"],
F: ["D"],
G: ["C"],
H: ["C"],
I: ["C", "J"],
J: ["I"],
};
// (graph, μμ μ μ )
const dfs = (graph, startNode) => {
let needVisitStack = []; // νμμ ν΄μΌ ν λ
Έλλ€
let visitedQueue = []; // νμμ λ§μΉ λ
Έλλ€
needVisitStack.push(startNode);
// νμμ ν΄μΌ ν λ
Έλκ° λ¨μ μλ€λ©΄
while (needVisitStack.length !== 0) {
const node = needVisitStack.pop();
console.log("λ
Έλ:",node)
if (!visitedQueue.includes(node)) {
visitedQueue.push(node);
console.log('λ°©λ¬Έν ν',visitedQueue)
needVisitStack = [...needVisitStack, ...graph[node]];
console.log("λ°©λ¬Έν΄μΌν μ€ν",needVisitStack)
console.log("-----------------");
}
console.log("-----------------");
}
return visitedQueue;
};
console.log(dfs(graph, "A"));
νμν λ
Έλ: A
λ°©λ¬Έν ν ['A']
λ°©λ¬Έν΄μΌν μ€ν (2) ['B', 'C']
-----------------
-----------------
νμν λ
Έλ: C
λ°©λ¬Έν ν (2) ['A', 'C']
λ°©λ¬Έν΄μΌν μ€ν (5) ['B', 'A', 'G', 'H', 'I']
-----------------
-----------------
νμν λ
Έλ: I
λ°©λ¬Έν ν (3) ['A', 'C', 'I']
λ°©λ¬Έν΄μΌν μ€ν (6) ['B', 'A', 'G', 'H', 'C', 'J']
-----------------
-----------------
νμν λ
Έλ: J
λ°©λ¬Έν ν (4) ['A', 'C', 'I', 'J']
λ°©λ¬Έν΄μΌν μ€ν (6) ['B', 'A', 'G', 'H', 'C', 'I']
-----------------
-----------------
νμν λ
Έλ: I // λ°©λ¬Έν νμ μ‘΄μ¬
-----------------
νμν λ
Έλ: C // λ°©λ¬Έν νμ μ‘΄μ¬
-----------------
νμν λ
Έλ: H
λ°©λ¬Έν ν (5) ['A', 'C', 'I', 'J', 'H']
λ°©λ¬Έν΄μΌν μ€ν (4) ['B', 'A', 'G', 'C']
-----------------
-----------------
νμν λ
Έλ: C // λ°©λ¬Έν νμ μ‘΄μ¬
-----------------
νμν λ
Έλ: G
λ°©λ¬Έν ν (6) ['A', 'C', 'I', 'J', 'H', 'G']
λ°©λ¬Έν΄μΌν μ€ν (3) ['B', 'A', 'C']
-----------------
-----------------
νμν λ
Έλ: C // λ°©λ¬Έν νμ μ‘΄μ¬
-----------------
νμν λ
Έλ: A // λ°©λ¬Έν νμ μ‘΄μ¬
-----------------
νμν λ
Έλ: B
λ°©λ¬Έν ν (7) ['A', 'C', 'I', 'J', 'H', 'G', 'B']
λ°©λ¬Έν΄μΌν μ€ν (2) ['A', 'D']
-----------------
-----------------
νμν λ
Έλ: D
λ°©λ¬Έν ν (8) ['A', 'C', 'I', 'J', 'H', 'G', 'B', 'D']
λ°©λ¬Έν΄μΌν μ€ν (4) ['A', 'B', 'E', 'F']
-----------------
-----------------
νμν λ
Έλ: F
λ°©λ¬Έν ν (9) ['A', 'C', 'I', 'J', 'H', 'G', 'B', 'D', 'F']
λ°©λ¬Έν΄μΌν μ€ν (4) ['A', 'B', 'E', 'D']
-----------------
-----------------
νμν λ
Έλ: D // λ°©λ¬Έν νμ μ‘΄μ¬
-----------------
νμν λ
Έλ: E
λ°©λ¬Έν ν (10) ['A', 'C', 'I', 'J', 'H', 'G', 'B', 'D', 'F', 'E']
λ°©λ¬Έν΄μΌν μ€ν (3) ['A', 'B', 'D']
-----------------
-----------------
νμν λ
Έλ: D // λ°©λ¬Έν νμ μ‘΄μ¬
-----------------
νμν λ
Έλ: B // λ°©λ¬Έν νμ μ‘΄μ¬
-----------------
νμν λ
Έλ: A // λ°©λ¬Έν νμ μ‘΄μ¬
-----------------
(10) ['A', 'C', 'I', 'J', 'H', 'G', 'B', 'D', 'F', 'E']