Untitled

 avatar
unknown
java
2 years ago
1.8 kB
3
Indexable
 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;