java
unknown
java
2 years ago
2.2 kB
6
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...