in lib/src/functions.dart [169:196]
void strongConnect(T vertex) {
indices[vertex] = index;
lowLinks[vertex] = index;
index++;
stack.add(vertex);
onStack.add(vertex);
for (var successor in graph[vertex]!) {
if (!indices.containsKey(successor)) {
strongConnect(successor);
lowLinks[vertex] = math.min(lowLinks[vertex]!, lowLinks[successor]!);
} else if (onStack.contains(successor)) {
lowLinks[vertex] = math.min(lowLinks[vertex]!, lowLinks[successor]!);
}
}
if (lowLinks[vertex] == indices[vertex]) {
var component = <T>{};
T? neighbor;
do {
neighbor = stack.removeLast();
onStack.remove(neighbor);
component.add(neighbor as T);
} while (neighbor != vertex);
result.add(component);
}
}