[java] 자바에서 사용하는 DFS 알고리즘

DFS(깊이 우선 탐색)는 그래프 구조를 탐색하기 위한 알고리즘 중 하나입니다. 이 알고리즘은 그래프의 모든 정점을 방문하고자 할 때 활용됩니다. 이번 글에서는 자바에서 DFS 알고리즘을 구현하는 방법에 대해 알아보겠습니다.

DFS 알고리즘 개요

DFS 알고리즘은 그래프를 탐색하면서 한 정점으로부터 다른 정점으로 이동해가는 방식입니다. 이 과정에서 아직 방문하지 않은 정점을 만나면 해당 정점으로 이동하여 탐색을 계속 진행합니다. DFS 알고리즘은 재귀적으로 구현될 수 있으며, 스택 자료구조를 사용하여 반복적으로 구현할 수도 있습니다.

자바를 이용한 DFS 알고리즘 구현

다음은 자바를 사용하여 DFS 알고리즘을 구현한 간단한 예제 코드입니다.

import java.util.List;
import java.util.Stack;

public class Graph {
    private int V;
    private List<Integer>[] adj;

    public Graph(int V) {
        this.V = V;
        adj = new List[V];
        for (int i = 0; i < V; ++i)
            adj[i] = new ArrayList();
    }

    public void addEdge(int v, int w) {
        adj[v].add(w);
    }

    public void DFS(int s) {
        boolean[] visited = new boolean[V];
        Stack<Integer> stack = new Stack<>();
        stack.push(s);

        while (!stack.empty()) {
            s = stack.pop();

            if (!visited[s]) {
                System.out.print(s + " ");
                visited[s] = true;
            }

            for (int n : adj[s]) {
                if (!visited[n]) {
                    stack.push(n);
                }
            }
        }
    }
}

위 코드는 그래프를 인접 리스트로 표현하고, 해당 그래프에 DFS 알고리즘을 적용하는 예제입니다.

DFS 알고리즘은 그래프 탐색 문제를 해결하는 데에 유용하게 활용될 수 있습니다. 추가로 해당 알고리즘의 시간 복잡도 및 공간 복잡도를 고려하여 실제 상황에 맞게 적용하는 것이 중요합니다.