DFS는 깊이 우선 탐색이라고도 부르며, 그래프에서 깊은 부분을 우선적으로 탐색하는 알고리즘
-
탐색 시작 노드를 스택에 삽입하고 방문 처리 한다.
-
스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리를 한다. 방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다.
-
2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다.
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
bfs(graph, 1, visited) # 1 2 7 6 8 3 4 5
bfs를 코드로 구현하면 데이터를 담기 위한 queue를 구현하고, 큐가 빌 때까지 계속 반복하면서 연결된 원소들을 차례대로 큐에 삽입하는 형태이다.
DFS/BFS는 1차원 배열이나 2차원 배열 문제에서 많이 사용된다.
각 배열의 값들이 좌표라고 생각하고, 좌표를 상하좌우로만 이동하면서 탐색을 하는 문제들이 많이 출제된다.