📌 1. DFS 기본 개념
DFS는 지난번에 포스팅한 BFS와 함께 그래프를 탐색하는 대표적 방법 중 하나로 깊이를 우선으로 하는 탐색법으로 Depth First Search를 의미한다.
DFS는 완전 탐색 방법으로 가장 깊은 정점까지 갔다가 해당 경로의 끝 지점에 다다르면 마지막 갈림길로 돌아간다. 마지막 갈림길로 돌아가기 위해 스택 자료 구조를 사용하여 마지막 갈림길을 저장해둔다.
📌 2. DFS 코드로 나타내기
- 시작정점 cur를 결정하여 방문한다.
- 정점 cur에 인접한 정점 중에서
- 방문하지 않은 정점 a가 있다면, 정점 a를 스택에 push하고 정점 a를 방문한다. 그리고 a를 cur로 하여 다시 위 순서를 반복한다.
- 방문하지 않은 정점이 없으면, 탐색의 방향을 바꾸기 위해서 스택을 pop 하여 가장 마지막에 방문한 정점을 a로 하여 다시 위 순서를 반복한다
- 스택이 공백이 될 때까지 반복한다.
# V : 정점의 갯수, E : 간선의 갯수, node : 정점간의 연결 정보
# 인접행렬
matrix = [[0 for _ in range(V + 1)] for _ in range(V + 1)]
for i in range(E):
matrix[node[i * 2]][node[i * 2 + 1]] = 1
matrix[node[i * 2 + 1]][node[i * 2]] = 1
# 1번이 시작 정점인 경우
stack = [1]
# 방문 체크할 리스트
visited = []
# 1번 정점에서 시작이므로 1번 정점은 이미 방문한 것으로 체크
visited.append(1)
while stack:
# cur : 현재 위치
cur = stack.pop()
for i in range(1, V + 1):
if matrix[v][i] and i not in visited:
stack.append(i)
visited.append(i)
반응형
'✨APS (Algorithm Problem Solving) > Algorithm' 카테고리의 다른 글
[Algo] BFS(너비 우선 탐색) (0) | 2022.09.26 |
---|---|
[Algo] Greedy Algorithm(그리디 알고리즘) (0) | 2022.09.22 |