
BFS(왼쪽)와 DFS(오른쪽)
BFS(Breadth-First Search / 너비 우선 탐색)
- 시작정점에서부터 인접해 있는 노드를 우선으로 탐색하는 방법
- 두 개의 큐를 사용
- 주로 최단거리를 구하는 문제에 사용
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']
};
const bfs = (graph, start) => {
let visited = [];
let needVisit = [];
needVisit.push(start);
while(needVisit.length !== 0){
let node = needVisit.shift();
if(!visited.includes(node)){
visited.push(node);
needVist = [...needVisit, ...graph[node]];
}
}
return visited;
}
DFS(Depth-First Search / 깊이 우선 탐색)
- 시작정점에서부터 해당 분기를 전부 탐색 한 후 다음 분기를 탐색하는 방법
- 한개의 큐, 한개의 스택을 사용
- 주로 경로의 존재 여부를 판별하는 문제에 사용
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']
};
const dfs = (graph, start) => {
let visited = [];
let needVisit = [];
needVisit.push(start);
while(needVisit.length !== 0){
let node = needVisit.pop();
if(!visited.includes(node)){
visited.push(node);
needVist = [...needVisit, ...graph[node]];
}
}
return visited;
}
참고사이트