[ALGO] Lect4. 그래프 탐색 알고리즘: DFS, BFS
교수: 성균관대학교 소프트웨어학과 허재필 교수님
사이트: http://www.kmooc.kr/courses/course-v1:SKKUk+SKKU_46+2021_T1/course/
이번 시간에는 주어진
1. 그래프 탐색: DFS와 BFS
Graph Traversal(Search), 그래프 순회
-
Breadth-First Search, BFS: 너비 우선 순회
-
Depth-First Search, DFS: 깊이 우선 순회
BFS와 DFS은 유사한 알고리즘을 공유하지만
대략적인 알고리즘 요약
- 하나의 vertex를 선택한 뒤,
visit이라 표시하고 queue(혹은 stack)에 삽입 한다. - queue(혹은 stack)이 빌 때까지 아래 동작을 반복한다.
- queue(혹은 stack)에서
하나의 vertex를 꺼낸다. - 꺼낸 vertex와
인접한 vertex 중, visit이라 표시되지 않은 vertex를 queue(혹은 stack)에 삽입 한다.
- queue(혹은 stack)에서
BFS 알고리즘
아래 예시를 통해 BFS 알고리즘을 살펴본다.
BFS 알고리즘은
DFS 알고리즘
BFS 알고리즘이 queue를 사용하여 FIFO 순서로 그래프를 순회하였다면, DFS 알고리즘은 stack을 사용하여 LIFO 순서로 그래프를 순회한다.
아래 예시를 통해 DFS 알고리즘을 살펴보자.
DFS 알고리즘은
BFS와 DFS
특징
BFS와 DFS는 인접 vertex를 삽입하는 순서에 따라 최종 순회 순서가 달라진다.
응용
BFS 혹은 DFS 알고리즘을 이용하여 그래프로부터 connected component를 구할 수 있다.
2. 그래프 탐색의 STL 활용 구현
위와 같은 그래프를 BFS와 DFS 알고리즘을 이용하여 정렬하는 코드를 작성해보자.
BFS 및 DFS 구현
실행 결과
$ ./main.exe graph.txt
[Graph/Init] start
# of vertices=13, # of edges = 12
... edges[A] : B
... edges[A] : H
... edges[B] : C
... edges[B] : E
... edges[C] : D
... edges[E] : F
... edges[E] : G
... edges[H] : I
... edges[H] : M
... edges[I] : J
... edges[I] : K
... edges[I] : L
[Graph/Init] end
[BFS] start
--- The result of Breadth-First Searching ---
A B H C E I M D F G J K L
[BFS] end
[DFS] start
--- The result of Depth-First Searching ---
A B C D E F G H I J K L M
[DFS] end
References
- [집콕]인공지능을 위한 알고리즘과 자료구조: 이론, 코딩, 그리고 컴퓨팅 사고-비선형 자료구조, K-MOOC: http://www.kmooc.kr/courses/course-v1:SKKUk+SKKU_46+2021_T1/courseware/1158909c057347478d7386a2b7e97214/e9d736660cad4f76bcb9a05974fe0bf2/1?activate_block_id=block-v1%3ASKKUk%2BSKKU_46%2B2021_T1%2Btype%40vertical%2Bblock%4052b62ff6da2147c9a8a65a6056681d91