[알고리즘] 깊이 우선 탐색 (Depth First Search, DFS) - JAVA/자바
Seunghyun_KO2022. 2. 13. 09:00
728x90
반응형
깊이 우선 탐색(Depth First Search, DFS)
: 하나의 정점으로부터 시작하여 깊은 곳 우선으로 탐색하여 최종적으로 연결된 모든 정점을 탐색하는 방법
특징
① 경로상의 노드들만 기억하면 되므로 차지하는 저장 공간이 적다.
② 같은 레벨의 경로보다 더 깊은 레벨을 우선으로 탐색한다.
③ 재귀적으로 동작하며, 후입 선출(LIFO, Last In First Out) 구조이다.
알고리즘
① 시작 정점 v를 결정하여 방문 ② 정점 v에 인접한 정점 중 1. 방문하지 않은 정점 w가 있으면, 정점 v를 스택에 push 하고 w를 방문하고 w를 v에 대입하여 ②과정 반복 수행 2. 방문하지 않은 정점이 없으면, 탐색의 방향을 바꾸기 위해 마지막 방문 정점을 스택을 pop 하여 받은 정점 v로 하여 다시 ②과정 반복 수행 ③ 스택이 공백이 될 때까지 ②반복 수행
DFS(v)
for (i ← 0; i<n; i ← i+1) do {
visited[i] ← false;
}
stack ← createStack();
visited[v] ← true;
while (not isEmpty(stack)) do {
if (visited[v의 인접정점 w] = false) then {
push(stack, v);
visited[w] ← true;
w 방문;
v ← w;
}
else v ← pop(stack);
}
end DFS()