[Algorithm] BFS & DFS
Updated:
그래프 순회
그래프 탐색이라고도 불리며 그래프의 각 정점을 방문하는 과정
- 깊이 우선 탐색(Depth-First Search)
- 스택 또는 재귀로 구현
- 미로찾기를 풀기 위한 전략을 찾다가 고안
- 너비 우선 탐색(Breadth-First Search)
- 주로 큐로 구현
- 그래프의 최단 경로를 구하는 문제 등에 사용
그래프 표현 방법
- 인접 행렬(Adjacency Matrix)
- 인접 리스트(Adjacency List)
graph = {
1: [2, 3, 4],
2: [5],
3: [5],
4: [],
5: [6, 7],
6: [],
7: [3],
}
DFS(깊이 우선 탐색)
- recursive_dfs
def recursive_dfs(v, discovered=[]):
discovered.append(v)
for w in graph[v]:
if w not in discovered:
discovered = recursive_dfs(w, discovered)
return discovered
- stack : iterative_dfs
def iterative_dfs(start_v):
discovered = []
stack = [start_v]
while stack:
v = stack.pop()
if v not in discovered:
discovered.append(v)
for w in graph[v]:
stack.append(w)
return discovered
BFS(너비 우선 탐색)
def iterative_bfs(start_v):
discovered = [start_v]
queue = [start_v]
while queue:
v = queue.pop(0)
for w in graph[v]:
if w not in discovered:
discovered.append(w)
queue.append(w)
return discovered
Leave a comment