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
|
public static int[] dijkstra(int[][] matrix, int src, int n){ int[] dist = new int[n]; Arrays.fill(dist, Integer.MAX_VALUE); Set<Integer> set = new HashSet<>(n); set.add(src); for(int i = 0; i < n; i++){ dist[i] = matrix[src][i]; } while (set.size() < n){ int minDist = Integer.MAX_VALUE; int minIndex = -1; for(int i = 0; i < n; i++){ if(!set.contains(i) && dist[i] < minDist){ minDist = dist[i]; minIndex = i; } } set.add(minIndex); for(int i = 0; i < n; i++){ if(!set.contains(i) && dist[minIndex] + matrix[minIndex][i] < dist[i]){ dist[i] = dist[minIndex] + matrix[minIndex][i]; } }
} return dist; }
|