ArrayList<HashMap<Integer, Integer>> arrayList = new ArrayList<>();
for(int i = 0; i < n; i++) {
arrayList.add(i, new HashMap<>());
}
for (Edge edge : edges) {
int edgeFrom = edge.from;
int vertex = edge.to;
int edgeWeight = edge.weight;
arrayList.get(edgeFrom).put(vertex, edgeWeight);
}
ArrayList<Integer> mst = new ArrayList<>();
PriorityQueue<Integer> queue = new PriorityQueue<>();
int[] key = new int[n];
key[0] = 0;
for (int i = 1; i <= n; i++) {
key[i] = Integer.MAX_VALUE;
}
key[s] = 0;
boolean[] visited = new boolean[n];
for(int j = 0; j < visited.length; j++) {
visited[j] = false;
}
while (!queue.isEmpty()) {
int node = queue.remove();
HashMap<Integer, Integer> currEntry = arrayList.get(node);
if (node == t) {
return key[t];
}
if (visited[node] == false) {
visited[node] = true;
for (Map.Entry<Integer, Integer> neighbour : currEntry.entrySet()) {
int to = neighbour.getKey();
int weight = neighbour.getValue();
if(visited[to] == false && (weight < key[to])) {
key[to] = weight + key[node] + 1;
queue.add(to);
}
}
}
}
return -1;