그래프를 탐색하는 방법에는 대표적으로 DFS와 BFS가 있다.
- DFS(Depth-First Search): 깊이 우선 탐색
- BFS(Breadth-First Search): 너비 우선 탐색
💡 트리에서 배웠던 전위순회(pre-order), 중위순회(in-order), 후위순회(post-order)는 DFS 방법에 속하고, 레벨순회(level-order)는 BFS 방법에 속한다. 👉 트리 문서 바로가기
출처: Graph 검색 DFS, BFS 구현 in Java - 엔지니어대한민국
노드의 어떤 자식 노드, 그 노드의 또 어떤 자식 노드, 그 노드의 자식 노드, ... 더이상의 자식 노드가 없을 때까지 깊게 파고들고 다시 되돌아 오며 들르지 않았던 다른 노드를 탐색하는... 이런 방법을 DFS(깊이 우선 탐색)이라고 한다. (📌설명에서 편의상 자식 노드라고 칭했다. 트리가 아닌 그래프에는 자식 노드라는 개념이 없으므로 인접한 노드라는 표현이 더 정확한 표현임을 알아두자.)
DFS는 스택(Stack)을 사용하여 쉽게 구현할 수 있다.
DFS는 재귀호출(Recursion)을 이용해 구현할 수도 있다. 재귀호출을 이용하면 코드가 훨씬 간결해진다.
노드의 자식 노드들을 모두 방문하고 그 다음 층 자식 노드들을 방문하는 식으로 레벨 순서대로 탐색하는 것이 BFS(너비 우선 탐색)이다.
BFS는 큐(Queue)를 사용하여 쉽게 구현할 수 있다.