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; | |
} |