DFS: Stack 혹은 재귀함수(Recursion)
BFS: Queue
두 방식 모두 조건 내의 모든 노드를 검색한다는 점에서 시간 복잡도는 동일합니다.
DFS와 BFS 둘 다 다음 노드가 방문하였는지를 확인하는 시간과 각 노드를 방문하는 시간을 합하면 됩니다.
const DFS = function (node) {
let answer = "";
const visited = new Array(N + 1).fill(false, 0, N + 1);
const stack = [];
stack.push(node);
while (stack.length > 0) {
const cur = stack.pop();
if (!visited[cur]) {
visited[cur] = true;
answer += cur + " ";
for (let next = N; next >= 1; next--) {
if (!visited[next] && graph[cur][next]) {
stack.push(next);
}
}
}
}
return answer;
};
const BFS = function (node) {
let answer = "";
const visited = new Array(N + 1).fill(false, 0, N + 1);
visited[node] = true;
const Queue = [];
Queue.push(node);
while (Queue.length > 0) {
const cur = Number(Queue.shift());
answer += cur + " ";
for (let next = 1; next <= N; next++) {
if (!visited[next] && graph[cur][next]) {
visited[next] = true;
Queue.push(next);
}
}
}
return answer;
};