트리와 그래프 탐색하는 방법.
DFS : Depth First Search. 깊이 우선 탐색 (수직적)
시작 노드로부터 해당 분기를 완벽하게 모두 탐색 후 다음 분기로 넘어가는 방법
장점
단점
스택(LIFO) or 재귀함수로 구현
visited = [] # 이전에 방문했던 노드 리스트 (1차원)
stack = [] # 방문해야 하는 노드 리스트
BFS : Breadth First Search. 너비 우선 탐색 (수평적)
시작 노드로부터 가까운 노드를 먼저 탐색하는 방법
주로 두 노드 사이의 **최단 경로(거리)**를 찾고 싶을 때 이용
장점
단점
**큐(FIFO)**로 구현
O(n)
O(1)
from collections import deque
visited = [] # 이전에 방문했던 노드 리스트 (1차원)
queue = deque() # 큐 (덱, 디큐)
DFS(stack 과정) : 1 → (1 pop) → 8, 7, 2 → 1, 8, 7 (2 pop)→ 1, 8, 7, 6, 3 → 1, 8, 7, 6 (3 pop) → …
BFS(queue 과정) : 1 → (1 popleft) → 4, 3, 2 → 3, 2 (4 popleft) → 2 (3 popleft) → (2 ~) → 6, 5 → …
cf. 비교 요약