components.js 439 B

123456789101112131415161718192021222324252627
  1. var _ = require('../lodash')
  2. module.exports = components
  3. function components (g) {
  4. const visited = {}
  5. const cmpts = []
  6. let cmpt
  7. function dfs (v) {
  8. if (_.has(visited, v)) return
  9. visited[v] = true
  10. cmpt.push(v)
  11. _.each(g.successors(v), dfs)
  12. _.each(g.predecessors(v), dfs)
  13. }
  14. _.each(g.nodes(), function (v) {
  15. cmpt = []
  16. dfs(v)
  17. if (cmpt.length) {
  18. cmpts.push(cmpt)
  19. }
  20. })
  21. return cmpts
  22. }