Advertisement
Guest User

Untitled

a guest
Jun 19th, 2019
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. static int[] shortestReach(final int n, final int[][] edges, final int s) {
  2. final Node source = buildGraph(n, edges, s);
  3. final Map<Integer, Integer> dists = new HashMap<>();
  4. dists.put(s, 0);
  5. final Set<Integer> visited = new HashSet<>();
  6. final Queue<Node> queue = new PriorityQueue<>(Comparator.comparing(v -> dists.getOrDefault(v.val, Integer.MAX_VALUE)));
  7. queue.add(source);
  8. while (!queue.isEmpty()) {
  9. final Node node = queue.poll();
  10. final int dist = dists.get(node.val);
  11. visited.add(node.val);
  12. for (final Map.Entry<Node, Integer> adj: node.adjs.entrySet()) {
  13. final Node adjNode = adj.getKey();
  14. final int adjDist = dist + adj.getValue();
  15. if (!visited.contains(adjNode.val)) {
  16. dists.put(adjNode.val, adjDist);
  17. queue.add(adj.getKey());
  18. }
  19. }
  20. }
  21. return buildResult(dists, s, n);
  22. }
  23.  
  24. private static int[] buildResult(final Map<Integer, Integer> dists, final int s, final int n) {
  25. final int[] result = new int[n - 1];
  26. for (int i = 1; i <= n; i++) {
  27. if (i != s) {
  28. final int dist = dists.getOrDefault(i, -1);
  29. if (i < s) {
  30. result[i - 1] = dist;
  31. } else {
  32. result[i - 2] = dist;
  33. }
  34. }
  35. }
  36. return result;
  37. }
  38.  
  39. private static Node buildGraph(final int n, final int[][] edges, final int s) {
  40. final Map<Integer, Node> graph = new HashMap<>();
  41. for (int i = 1; i <= n; i++) {
  42. graph.put(i, new Node(i));
  43. }
  44. for (final int[] edge: edges) {
  45. final Node node1 = graph.get(edge[0]);
  46. final Node node2 = graph.get(edge[1]);
  47. final int len = edge[2];
  48. node1.adjs.put(node2, len);
  49. node2.adjs.put(node1, len);
  50. }
  51. return graph.get(s);
  52. }
  53.  
  54. private static class Node {
  55. private final int val;
  56. private final Map<Node, Integer> adjs = new HashMap<>();
  57. private Node(final int val) {
  58. this.val = val;
  59. }
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement