DFS(깊이우선탐색)

2022. 10. 30. 09:42·사소한 아이의 소소한 스킬/알고리즘
반응형

이번엔 DFS를 알아보도록하자.

 

DFS란 한국말론 깊이우선 탐색(Depth First Search)이다.

 

깊이우선탐색은 무엇인가..

 

무언가 탐색을 할때 동일한 레벨의 노드를 탐색을 먼저 하는것이 아니라 아랫레벨의 노드를 우선 탐색하는 시스템이다.

 

역시 말로는 이해가 안가니...

 

이미지로......

 

 

사진과 같은 트리가 존재할때 깊이우선의 경우에 이렇게 순회하게된다.(우측, 좌측의 순서는 없음)

 

A -> B -> H -> M -> J -> K -> L -> I -> C -> D -> G -> E -> F

 

대충 느낌이 팍 오죠?

 

그럼 어떤식으로 구현하면 될지 생각을 해보면...

 

stack 구조를 이용해서 노드를 추가한 후 추가한 노드를 다시 탐색하고 추가한 노드를 다시 탐색하고 하면 깊이 우선이 가능!!!!

 

코드 ㄱㄱ

 

def dfs(graph, start_node):
    visit = list()
    stack = list()

    stack.append(start_node)

    while stack:
        node = stack.pop()
        if node not in visit:
            visit.append(node)
            stack.extend(graph[node])

    return visit


if __name__ == "__main__":
    graph = {
        'A': ['B'],
        'B': ['A', 'C', 'H'],
        'C': ['B', 'D'],
        'D': ['C', 'E', 'G'],
        'E': ['D', 'F'],
        'F': ['E'],
        'G': ['D'],
        'H': ['B', 'I', 'J', 'M'],
        'I': ['H'],
        'J': ['H', 'K'],
        'K': ['J', 'L'],
        'L': ['K'],
        'M': ['H']
    }

    print(dfs(graph, 'A'))
    
    Output:
    ['A', 'B', 'H', 'M', 'J', 'K', 'L', 'I', 'C', 'D', 'G', 'E', 'F']

 

위에서 생각한거처럼 딱 나왔습니다..!!

반응형
저작자표시 비영리 변경금지 (새창열림)
'사소한 아이의 소소한 스킬/알고리즘' 카테고리의 다른 글
  • BFS(너비우선탐색)
  • 재귀함수
  • 알고리즘...
JOOJI
JOOJI
그냥 혼자좋아하는 것들 남기는 블로그....
  • JOOJI
    사소한프로그래머의 소소한행복
    JOOJI
  • 전체
    오늘
    어제
    • 분류 전체보기 (951) N
      • 사소한 아이의 소소한 일상 (245)
      • 사소한 아이의 소소한 먹거리 (43)
      • 사소한 아이의 소소한 정보 (75) N
      • 사소한 아이의 소소한 감사 (4)
      • 사소한 아이의 소소한 운동 (53) N
      • 사소한 아이의 소소한 여행 (40)
        • 2013_전주 (1)
        • 2014_독일 (13)
        • 2014_군산 (1)
        • 2015_제주도 (3)
        • 2015_서울모토쇼 (3)
        • 2015_진해 (1)
        • 2015_전주 (1)
        • 2016_여수 (1)
        • 2020_강릉 (1)
        • 2022_제주도 (4)
      • 사소한 아이의 소소한 강짱 (22)
        • 하트투하트 (10)
        • MAPS (1)
        • 화려한 유혹 (2)
        • 한여름의 추억 (2)
      • 사소한 아이의 TV (50)
        • Drama (9)
        • 예능 (32)
        • 사소한 아이의 다현 (9)
      • 사소한 아이의 소소한 스킬 (130)
        • Scaleform (2)
        • C# (74)
        • QT (3)
        • 알고리즘 (4)
        • Python (21)
        • PyQT5 (9)
        • C_C++ (2)
      • 사소한 아이의 소소한 축구 (283)
        • Korea (25)
        • Germany (45)
        • Bayern Munich (64)
        • Soccer_ETC (75)
        • Euro 2016 (12)
        • 친선경기 (3)
      • 사소한 아이의 소소한 생활정보 (6)
  • 블로그 메뉴

    • 홈
    • 태그
    • 미디어로그
    • 위치로그
    • 방명록
    • 관리
  • 링크

    • 독일여행
    • 레바티스토리
    • 프라치노 공간
    • 남성패션꿀템 블로그
  • 공지사항

  • 인기 글

  • 태그

    문제
    뮌헨
    c#
    WPF
    독일
    회사밥
    바이에른 뮌헨
    python
    분데스리가
    러닝
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
JOOJI
DFS(깊이우선탐색)
상단으로

티스토리툴바