[java] 자바의 다익스트라(Dijkstra) 알고리즘 이해하기

다익스트라(Dijkstra) 알고리즘은 그래프 내에서 두 정점 간의 최단 경로를 찾기 위해 사용되는 알고리즘입니다. 이 알고리즘은 가중치가 있는 그래프에서 실행되며, 최소 비용으로 목적지에 도달할 수 있는 경로를 찾는 데 사용됩니다.

다익스트라 알고리즘의 원리

다익스트라 알고리즘은 시작 정점에서부터 각 정점까지의 최단 경로를 찾는 방법으로, “탐욕적인” 방식을 사용합니다. 다른 말로 하면, 알고리즘은 각 단계에서 현재 위치에서 가장 짧은 경로를 선택하여 목적지에 도달하기 위한 최단 경로를 찾습니다.

다익스트라 알고리즘의 구현

아래는 Java로 다익스트라 알고리즘을 구현하는 간단한 예제 코드입니다.

import java.util.*;

public class DijkstraAlgorithm {
    public static void main(String[] args) {
        int[][] graph = new int[][]{
            {0, 4, 0, 0, 0, 0, 0, 8, 0},
            {4, 0, 8, 0, 0, 0, 0, 11, 0},
            // 그래프의 나머지 부분 생략
        };
        dijkstra(graph, 0);
    }

    static void dijkstra(int[][] graph, int src) {
        int V = graph.length;
        int[] dist = new int[V];
        Boolean[] visited = new Boolean[V];
        for (int i = 0; i < V; i++) {
            dist[i] = Integer.MAX_VALUE;
            visited[i] = false;
        }
        dist[src] = 0;
        for (int count = 0; count < V - 1; count++) {
            int u = minDistance(dist, visited);
            visited[u] = true;
            for (int v = 0; v < V; v++) {
                if (!visited[v] && graph[u][v] != 0 && dist[u] != Integer.MAX_VALUE &&
                    dist[u] + graph[u][v] < dist[v]) {
                    dist[v] = dist[u] + graph[u][v];
                }
            }
        }
        //최단 경로 출력
        printSolution(dist, V);
    }

    static int minDistance(int[] dist, Boolean[] visited) {
        int min = Integer.MAX_VALUE, minIndex = -1;
        for (int v = 0; v < dist.length; v++) {
            if (!visited[v] && dist[v] <= min) {
                min = dist[v];
                minIndex = v;
            }
        }
        return minIndex;
    }

    static void printSolution(int[] dist, int V) {
        System.out.println("Vertex \t\t Distance from Source");
        for (int i = 0; i < V; i++) {
            System.out.println(i + " \t\t " + dist[i]);
        }
    }
}

마무리

다익스트라 알고리즘은 그래프에서 최단 경로를 찾는 강력하고 유용한 방법입니다. 자바를 사용하여 이를 구현함으로써 다양한 애플리케이션에서 최단 경로 문제를 해결하는 데 도움이 될 수 있습니다.

더 많은 정보를 원하시거나 자세한 내용을 확인하고 싶으시다면, 아래의 링크를 참고해주세요.