어제 BFS에 대해서 다시 정리해 보았다. 이제 BFS와 쌍두마차를 이루고 있는 탐색 방법인 'DFS'를 간단하게 정리해 보도록 하자.
Depth - First Search의 약자로 그래프를 탐색 할 때 깊이를 우선적으로 탐색하는 방법을 의미하며 루트 노드에서 시작해서 다음 분기로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방식을 말한다
구현 방법은 크게 2가지를 이용하여 구현 가능하다.
stack을 이용한 구현
재귀함수를 이용한 구현
#이때 graph는 인접 리스트로 구현이 되어있다.
def dfs(graph, start):
stack = [start]
visited = []
while stack:
vertex = stack.pop()
if vertex not in visited:
visited.append(vertex)
stack.extend([neighbor for neighbor in graph[vertex] if neighbor not in visited])
return visited
def dfs(graph, start, visited = []):
visited.append(start)
for node in graph[start]:
if node not in visited:
dfs(graph, node, visited)
return visited
장점 : BFS보다 메모리를 덜 차지 한다.
단점