코딩,해볼까

DFS : 깊이 우선 탐색 본문

Back/TIL

DFS : 깊이 우선 탐색

떠굥 2023. 8. 21. 23:28
  • 다음 분기로 넘어가기 전에 해당 분기를 완벽히 탐색하는 방법이다.
  • 모든 노드 방문 여부 반드시 검사해야 한다.
  • 순환 알고리즘 (= 재귀) 형태를 가진다.
  • 구현방법
    • 스택 
    • 재귀함수
    • 인접 행렬, 인접 리스트
def dfs(v):
    discovered = []
    stack = [v]

    while stack:
        v = stack.pop()
        if v not in discovered:
            discovered.append(v)
            for w in sorted(graph[v], reverse=True):
                stack.append(w)
    return discovered

    print(dfs(1))
    
    graph = [[], [2, 3, 4], [3, 5, 6], [2], [2], [3], [3]]

 

# 재귀
def DFS(graph, v, visited, discovered):
    # 현재 위치 노드를 방문 처리
    visited[v] = True
    discovered.append(v)  # 방문하고 나서 적기
    for i in graph[v]:
        if not visited[i]:
            # discovered.append(i) # 방문하기 전에 적기
            DFS(graph, i, visited, discovered)

    return discovered


visited = [False] * len(graph)

v = 1
discovered = []

print(DFS(graph, v, visited, discovered))

 

▶ set 함수 https://wikidocs.net/16044

graph = {
    1: set([2, 3, 4]),
    2: set([3, 5, 6]),
    3: set([2]),
    4: set([2]),
    5: set([3]),
    6: set([3]),
}

▶ sort와 sorted

▶ dict와 list 에 따라서도 풀이법이 달라질 수 있다.

▶ 데이터타입 핸들링에 더더 익숙해지자.

Comments