Post

[Algorithm] DFS(깊이 우선 탐색)

DFS (깊이 우선 탐색)

💡 DFS란

  • 깊이를 우선해 그래프를 탐색하는 방법이다.
  • 노드와 연결된 다른 노드로 이동하고, 또 이동된 노드로 이동하는 방법
  • 스택이나 재귀함수를 통해 구현이 가능하다.

특징

  • BFS에 비해 메모리 사용률이 적다.
  • 찾고자하는 답이 트리에서 멀어질 수록 DFS가 유리
  • DFS의 대표적인 순회 방식은 전위 순회(Pro-Order)이다.

💡 스택을 구현한 DFS

1
2
3
4
5
6
7
8
9
10
def DFS(grapth, root):
    visited = [] #방문한 노드를 기록
    stack = [root]

    while(stack): #스택에 남은 것이 없을 때까지
        node = stack.pop() #node : 현재 방문한 노드
        if node not in visited:
            visited.append(node)
            stack.extend(graph[node])
    return visited

💡 재귀로 구현한 DFS

1
2
3
4
5
6
7
8
9
def DFS(graph, v, visited):
    #현재 노드를 방문 처리
    visited[v] = True
    print(v, end = ' ')

    #현재 노드와 연결된 다른 노드를 재귀적으로 방문
    for i in graph[v]:
        if not visited[i]:
            DFS(graph, i, visited)

💡 마무리

  • 자료구조 시간에 배웠었지만 실제 코드에서 오랫동안 사용을 안 했더니 다 까먹었다..
  • DFS를 많이 사용해보는 것만이 살 길이다!
This post is licensed under CC BY 4.0 by the author.