Advertisement
ogv

Untitled

ogv
Nov 5th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.90 KB | None | 0 0
  1. class Solution {
  2. public List<List<Integer>> criticalConnections(int n, List<List<Integer>> connections) {
  3. Set<List<Integer>>[] adj = new HashSet[n];
  4. for (int i = 0; i < n; i++) adj[i] = new HashSet<List<Integer>>();
  5. for (List<Integer> conn: connections) adj[conn.get(0)].add(conn);
  6.  
  7. Set<List<Integer>> critical = new HashSet<>();
  8. for (List<Integer> conn: connections) q.add(conn);
  9.  
  10. Set<List<Integer>> q = new HashSet<>();
  11. for (List<Integer> conn: connections) q.add(conn);
  12.  
  13. while (!q.isEmpty()) {
  14. List<Integer> edge = q.iterator().next();
  15. q.remove(edge);
  16.  
  17. System.out.println("Picked up edge " + edge.get(0) + "-" + edge.get(1));
  18.  
  19. Map<Integer, List<Integer>> visited = new HashMap<>();
  20. visited.put(edge.get(0), edge);
  21. int node = edge.get(1);
  22. for (;;) {
  23. if (adj[node].isEmpty()) break;
  24.  
  25. List<Integer> nextEdge = adj[node].iterator().next();
  26. int nextNode = nextEdge.get(1);
  27.  
  28. if (visited.containsKey(nextNode)) {
  29. System.out.println("Cycle at " + nextNode);
  30.  
  31. node = nextNode;
  32. do {
  33. List<Integer> edge = visited.get(node);
  34. q.remove(edge);
  35. adj[node].remove(edge);
  36. critical.remove(edge)
  37. node = edge.get(1);
  38. } while (node != nextNode);
  39.  
  40. break;
  41. }
  42. visited.put(node, nextEdge);
  43. node = nextNode;
  44. }
  45. }
  46.  
  47. return critical;
  48. }
  49. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement