이 포스트는 책 '이것이 코딩 테스트다'를 토대로 작성하였습니다.
1. 탐색 시작 노드를 스택에 삽입하고 방문 처리를 한다.
2. 스택의 최상단 노드에 방문하지 않은 인접 노드가 있으면 그 인접 노드를 스택에 넣고 방문 처리를 한다.
방문하지 않은 인접 노드가 없으면 스택에서 최상단 노드를 꺼낸다.
3. 2번의 과정을 더 이상 수행할 수 없을 때까지 반복한다.
다음과 같은 그래프를 노드 1을 시작으로 DFS를 이용해 탐색한다.
노드의 탐색 순서는 스택에 들어간 순서이므로,
노드의 탐색 순서는
1 -> 2 -> 7 -> 6 -> 8 -> 3 -> 4 -> 5
이다.
def dfs(graph, v, visited):
# 현재 노드를 방문 처리
visited[v] = True
print(v, end='')
# 현재 노드와 연결된 다른 노드를 재귀적으로 방문
for i in graph[v]:
if not visited[v]:
dfs(graph, i, visited)