java

 avatar
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...