Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Solution {
- public List<List<Integer>> criticalConnections(int n, List<List<Integer>> connections) {
- Set<List<Integer>>[] adj = new HashSet[n];
- for (int i = 0; i < n; i++) adj[i] = new HashSet<List<Integer>>();
- for (List<Integer> conn: connections) adj[conn.get(0)].add(conn);
- Set<List<Integer>> critical = new HashSet<>();
- for (List<Integer> conn: connections) q.add(conn);
- Set<List<Integer>> q = new HashSet<>();
- for (List<Integer> conn: connections) q.add(conn);
- while (!q.isEmpty()) {
- List<Integer> edge = q.iterator().next();
- q.remove(edge);
- System.out.println("Picked up edge " + edge.get(0) + "-" + edge.get(1));
- Map<Integer, List<Integer>> visited = new HashMap<>();
- visited.put(edge.get(0), edge);
- int node = edge.get(1);
- for (;;) {
- if (adj[node].isEmpty()) break;
- List<Integer> nextEdge = adj[node].iterator().next();
- int nextNode = nextEdge.get(1);
- if (visited.containsKey(nextNode)) {
- System.out.println("Cycle at " + nextNode);
- node = nextNode;
- do {
- List<Integer> edge = visited.get(node);
- q.remove(edge);
- adj[node].remove(edge);
- critical.remove(edge)
- node = edge.get(1);
- } while (node != nextNode);
- break;
- }
- visited.put(node, nextEdge);
- node = nextNode;
- }
- }
- return critical;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement