add-subgraph-constraints.js 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. import _ from 'lodash'
  2. function addSubgraphConstraints (g, cg, vs) {
  3. const prev = {}
  4. let rootPrev
  5. _.forEach(vs, function (v) {
  6. let child = g.parent(v)
  7. let parent
  8. let prevChild
  9. while (child) {
  10. parent = g.parent(child)
  11. if (parent) {
  12. prevChild = prev[parent]
  13. prev[parent] = child
  14. } else {
  15. prevChild = rootPrev
  16. rootPrev = child
  17. }
  18. if (prevChild && prevChild !== child) {
  19. cg.setEdge(prevChild, child)
  20. return
  21. }
  22. child = parent
  23. }
  24. })
  25. /*
  26. function dfs(v) {
  27. const children = v ? g.children(v) : g.children();
  28. if (children.length) {
  29. const min = Number.POSITIVE_INFINITY,
  30. subgraphs = [];
  31. _.forEach(children, function(child) {
  32. const childMin = dfs(child);
  33. if (g.children(child).length) {
  34. subgraphs.push({ v: child, order: childMin });
  35. }
  36. min = Math.min(min, childMin);
  37. });
  38. _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) {
  39. cg.setEdge(prev.v, curr.v);
  40. return curr;
  41. });
  42. return min;
  43. }
  44. return g.node(v).order;
  45. }
  46. dfs(undefined);
  47. */
  48. }
  49. export default addSubgraphConstraints