blob: bf506605457047eba04fbf5419d3dae668cda857 [file] [log] [blame]
library graphlib.alg.components;
import "../graph.dart";
List<List> components(Graph g) {
List<List> cmpts = [];
final visited = {};
List cmpt;
dfs(v) {
if (visited.containsKey(v)) return;
visited[v] = true;
cmpt.add(v);
g.successors(v).forEach(dfs);
g.predecessors(v).forEach(dfs);
}
g.nodes.forEach((v) {
cmpt = [];
dfs(v);
if (cmpt.length != 0) {
cmpts.add(cmpt);
}
});
return cmpts;
}