DFS
DFS는 깊이 우선 탐색(Depth-First Search)로 루트 노드에서 시작해서 다음 분기로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법이다. 예를들어 미로를 탐색할 때 한 방향으로 갈 수 있을 때까지 계속 가다가 더 이상 갈 수 없게 되면 다시 가장 가까운 갈림길로 돌아와서 이곳으로부터 다른 방향으로 다시 탐색을 진행하는 바업ㅂ과 유사하다. 즉, 넓게 탐색하기 전에 깊게 탐색하는 것이다. DFS를 사용하는 경우는 모든 노드를 방문하고자 하는 경우에 주로 사용된다. 깊이 우선 탐색이 너비 우선 탐색보다 좀 더 간단하다. 단순 검색 속도 자체는 너비 우선 탐색에 비해서 느리다.
DFS의 특징
DFS의 과정
DFS의 구현
# 재귀활용 구현
def recursive_dfs(v, visited = []):
visited.append(v) # 시작 정점 방문
for w in graph[v]:
if not w in visited: # 방문 하지 않았으면
visited = recursive_dfs(w, visited)
return visited
# 스택활용 구현
def iterative_dfs(start_v):
visited = []
stack = [start_v]
while stack:
v = stack.pop()
if v not in visited:
visited.append(v)
for w in graph[v]:
stack.append(w)
return visited
DFS의 시간 복잡도
DFS 관련 백준 문제 Github 링크
백준 DFS 관련 문제