본문 바로가기
카테고리 없음

DFS 알고리즘 (Depth First Search)

by sftt 2023. 12. 30.

DFS 알고리즘 (Depth First Search)

DFS 알고리즘은 그래프 탐색에 사용되는 알고리즘 중 하나로, 깊이를 우선으로 탐색하는 방식입니다. 그래프의 노드를 탐색하는 동안 연결된 간선을 계속해서 탐색하다가, 더 이상 갈 곳이 없는 경우 이전 노드로 돌아가 다른 갈림길로 탐색을 이어가는 방식입니다. 이러한 방법으로 모든 노드를 탐색할 수 있습니다.

동작 방식

  1. 시작 노드를 방문한다.
  2. 현재 노드에서 이웃한 노드들 중 아직 방문하지 않은 노드를 하나 선택하여 방문한다.
  3. 선택한 노드로 이동하여 해당 노드를 방문한다.
  4. 선택한 노드에서 다시 이웃한 노드들 중 아직 방문하지 않은 노드를 선택하여 방문한다.
  5. 이동할 수 있는 노드가 없는 경우 이전 노드로 돌아간다.
  6. 모든 노드를 방문할 때까지 2~5 과정을 반복한다.

구현 방법

DFS 알고리즘은 주로 재귀 함수를 이용하여 구현할 수 있습니다. 재귀 함수를 사용하면 현재 노드에서 다시 자기 자신을 호출하여 인접한 노드로 이동할 수 있습니다. 또한 방문 여부를 확인하기 위한 배열이 필요하며, 방문한 노드를 표시해주어야 합니다.

visited = [False] * n  # 노드별 방문 여부를 저장하는 배열

def dfs(graph, v):
    visited[v] = True  # v번 노드를 방문했다고 표시

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

활용 예시

DFS 알고리즘은 그래프 탐색 문제, 미로 찾기, 전위 순회(preorder traversal) 등 다양한 문제에 사용될 수 있습니다. 특히, 미로 찾기와 같은 문제에서는 DFS 알고리즘이 매우 효과적입니다.

DFS 알고리즘은 스택을 이용한 반복적인 구현 방법도 있으며, 재귀 함수를 사용하지 않고 구현할 수 있습니다. 또한 DFS 알고리즘을 활용한 여러 최적화 기법들도 존재하므로, 상황에 맞게 적절한 방식을 선택하여 사용할 수 있습니다.

참고문헌: 위키백과 - 깊이 우선 탐색

댓글