java
unknown
java
3 years ago
2.2 kB
8
Indexable
public static int getMeOuttaHere(int n, int m, int s, int t, Set<Edge> edges) {
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);
}
Queue<Integer> queue = new LinkedList<Integer>();
queue.add(s);
int[] key = new int[arrayList.size()];
for (int i = 0; i < key.length; i++) {
key[i] = Integer.MAX_VALUE;
}
key[s] = 0;
boolean[] visited = new boolean[arrayList.size()];
for(int j = 0; j < visited.length; j++) {
visited[j] = false;
}
while (!queue.isEmpty()) {
int node = queue.remove();
if (node == t) {
return key[node];
}
HashMap<Integer, Integer> currEntry = arrayList.get(node);
if (visited[node] == false) {
visited[node] = true;
for (Map.Entry<Integer, Integer> neighbour : currEntry.entrySet()) {
int to = neighbour.getKey();
int weight = neighbour.getValue();
System.out.println(to);
if(visited[to] == false && (weight < key[to])) {
if(to == t) {
key[to] = key[node];
} else {
key[to] = weight + key[node] + currEntry.size();
}
queue.add(to);
}
}
}
}
return visited[t] ? key[t] : -1;
}Editor is loading...