DFS 알고리즘
👑 DFS (Depth First Search)
깊이 우선 탐색(DFS) 이란 맹목적 탐색 방법의 하나로 백트래킹에 사용되는 대표적인
탐색 알고리즘이다. 특정 노드에서 시작해서 다음 분기로 넘어가기 전 완벽하게 탐색한 후
다음 분기로 넘어가는 방식이다. 일반적으로 재귀호출이나 스택으로 구현한다.
단순 검색 속도는 BFS에 비해 느리지만 구현이 간단하다는 장점이 있다.
💡 DFS 과정
-
한 루트로 탐색을 시작하면 최대한 깊숙이 탐색한다.
-
넓게탐색하는BFS와는 다르게깊게탐색한다.
🧩 구현 (C++)
- 재귀 사용
/* 재귀 사용 */
DFS (graph, start)
visited[start] = true
for each v ∈ graph.Adj[start]
if visited[v] == false
DFS(graph, v)
/* 시작 노드 start를 방문상태로 놓고 start의 인접 노드 v들에 대해 각각
방문 여부를 확인하고, 방문하지 않았다면 각각에 대해 DFS를 실행한다. */
- 스택 사용
/* 스택 사용 */
DFS (graph, start)
visited[start] = true
stack.push(start)
while (stack is not empty)
v = stack.pop()
if visited[v] == false
visited[v] = true
for each w ∈ graph.Adj[v]
if (not visited)
stack.push(w)
/* 시작 노드를 스택에 넣고 스택이 빌 때까지 pop하며 실행한다.
먼저 스택에서 꺼낸 후 방문 여부를 확인하고, 각각의 인접 노드들에 대해
방문한 노드가 아니라면 스택에 넣는다. */
Leave a comment