[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]);
}
}
}
마무리
다익스트라 알고리즘은 그래프에서 최단 경로를 찾는 강력하고 유용한 방법입니다. 자바를 사용하여 이를 구현함으로써 다양한 애플리케이션에서 최단 경로 문제를 해결하는 데 도움이 될 수 있습니다.
더 많은 정보를 원하시거나 자세한 내용을 확인하고 싶으시다면, 아래의 링크를 참고해주세요.