DFS, BFS

  • src : https://github.com/pine939/Programming/tree/master/practice/graph_search
  • graph 예시 image
  • 탐색 시작 노드에서 해당 분기를 완벽하게 탐색하는 방법이다.
  • 예를 들어, 미로 찾기에서 갈림길의 한 방향을 선택 후, 갈 수 있을 때 까지 가다가 더 이상 갈 수 없을 때 가장 최근의 갈림길의 다른 방향으로 탐색을 진행하는 것이 깊이 우선 탐색이라고 할 수 있다.
  • 스택과 재귀를 사용하여 탐색을 구현할 수 있다.

구현하기

  • Point 1 : stack은 backtracking용으로 사용한다. 따라서, cur 노드를 먼저 stack에 넣는다.
  • Point 2 : stack에 push될 때 해당 노드는 탐색되었음을 의미한다.

  • Recursive 구현
    • 1 2 3 4 5 6 7 8 9 10
    • 소스 코드
  • Stack을 사용한 구현
    • 소스 코드
  • 탐색 시작 노드에서 인접한 노드들을 먼저 탐색하는 방법이다.
  • 주로 두 노드 사이의 최단 경로를 찾고 싶을 때 이 방법을 선택한다.
  • 를 사용하여 탐색을 구현할 수 있다.

구현하기

  • Point : queue에서 pop할 때 해당 노드는 탐색되었음을 의미한다.

  • Queue를 사용한 구현

    • 1 2 5 9 3 6 8 10 4 7
    • 소스 코드