1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | import java.util.ArrayList; public class Dijkstra { public static void main(String args[]) throws Exception { int[][] map = { { 0, 10, 4, 999 }, { 10, 0, 2, 2 }, { 4, 2, 0, 5 }, { 999, 2, 5, 0 } }; // 모든 노드들의 거리(i->j) int n = 4; int[] visit = new int[n]; // 방문한 노드 확인 int[] minDistance = new int[n]; // 0에서 n까지 최단 경로 int min; int current = 0; int[] path = new int[n]; // 중간 경로 for (int i = 0; i < n; i++) { visit[i] = 0; minDistance[i] = 999; } // 방문한 좌표 = 0, 최단 거리 = 999로 초기화 minDistance[0] = 0; // 처음 거리 = 0으로 초기화 for (int i = 0; i < n; i++) { min = 9999; for (int j = 0; j < n; j++) { if (min > minDistance[j] && visit[j] == 0) { min = minDistance[j]; current = j; } // 방문안한 가장 가까운 노드 선택 } visit[current] = 1; for (int j = 0; j < n; j++) { if ((minDistance[j] > minDistance[current] + map[current][j]) && map[current][j] != 999) { minDistance[j] = minDistance[current] + map[current][j]; path[j] = current; } // 0~j 거리 > 0~현재 + 현재~j (현재를 거쳐가는게 더 빠르면) 최단 거리 수정 } } for (int i = 0; i < n; i++) { System.out.print(i + "번 노드까지 최단 경로 : "); int j = i; System.out.print(j); while (j != 0) { System.out.print(" <- " + path[j]); j = path[j]; } System.out.println(""); } } } | cs |