in src/main/java/com/twitter/sbf/graph/ConnectedComponents.java [49:81]
public static Set<IntSet> connectedComponents(GraphInterface g) {
Set<IntSet> ret = new HashSet<>();
Queue<Integer> q = new LinkedBlockingQueue<>();
IntSet unSeen = new IntOpenHashSet();
IntIterator nodeIter = g.getAllNodeIds();
while (nodeIter.hasNext()) {
unSeen.add(nodeIter.nextInt());
}
while (!unSeen.isEmpty()) {
int newNode = unSeen.iterator().next();
IntSet newComponent = new IntOpenHashSet();
newComponent.add(newNode);
q.add(newNode);
unSeen.remove(newNode);
while (!q.isEmpty()) {
int currentNode = q.remove();
IntIterator iter = g.getNeighbors(currentNode);
while (iter.hasNext()) {
int nbr = iter.nextInt();
if (unSeen.contains(nbr)) {
q.add(nbr);
assert !newComponent.contains(nbr);
newComponent.add(nbr);
unSeen.remove(nbr);
}
}
}
ret.add(newComponent);
}
return ret;
}