BFS와 DFS는 그래프를 탐색하는 알고리즘 기법이다.
DFS는 하나의 방향을 결정하면 그 방향을 따라 끝까지 도달한다. 한 노드를 시작으로 인접한 다른 노드를 재귀적으로 탐색해가고 끝까지 탐색하면 다시 위로 와서 다음을 탐색한다. 즉, 그래프에서 깊은 부분을 우선적으로 탐색한다.
def dfs(graph, v, visited):
visited[v] = True
print(v, end='')
for i in graph[v]: # 현재 노드와 연결된 노드를 재귀적으로 방문
if not visited[i]:
dfs(graph, i visited)
graph = [
[],
[2, 3, 8],
[1, 7],
[1, 4, 5],
[3, 5],
[3, 4] ,
[7],
[2, 6, 8] ,
[1, 7]
]
# 노드 방문 여부를 리스트로 표현
visited = [False] * 9
dfs(graph, 1, visited)
BFS는 현재 위치를 기준으로 가장 가까운(인접한) 노드를 순차적으로 방문한다. DFS와는 다르게 끝까지 파고드는 방향이 아니라, 주변을 순차적으로 탐색하는 방법(시작 정점으로부터 가까운 정점을 먼저 방문하고 멀리 떨어져 있는 정점을 나중에 방문)이며 일반적으로 DFS보다 수행시간이 좋다.