54 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			Java
		
	
	
	
	
	
var _ = require("../lodash");
 | 
						|
 | 
						|
module.exports = addSubgraphConstraints;
 | 
						|
 | 
						|
function addSubgraphConstraints(g, cg, vs) {
 | 
						|
  var prev = {},
 | 
						|
    rootPrev;
 | 
						|
 | 
						|
  _.forEach(vs, function(v) {
 | 
						|
    var child = g.parent(v),
 | 
						|
      parent,
 | 
						|
      prevChild;
 | 
						|
    while (child) {
 | 
						|
      parent = g.parent(child);
 | 
						|
      if (parent) {
 | 
						|
        prevChild = prev[parent];
 | 
						|
        prev[parent] = child;
 | 
						|
      } else {
 | 
						|
        prevChild = rootPrev;
 | 
						|
        rootPrev = child;
 | 
						|
      }
 | 
						|
      if (prevChild && prevChild !== child) {
 | 
						|
        cg.setEdge(prevChild, child);
 | 
						|
        return;
 | 
						|
      }
 | 
						|
      child = parent;
 | 
						|
    }
 | 
						|
  });
 | 
						|
 | 
						|
  /*
 | 
						|
  function dfs(v) {
 | 
						|
    var children = v ? g.children(v) : g.children();
 | 
						|
    if (children.length) {
 | 
						|
      var min = Number.POSITIVE_INFINITY,
 | 
						|
          subgraphs = [];
 | 
						|
      _.each(children, function(child) {
 | 
						|
        var childMin = dfs(child);
 | 
						|
        if (g.children(child).length) {
 | 
						|
          subgraphs.push({ v: child, order: childMin });
 | 
						|
        }
 | 
						|
        min = Math.min(min, childMin);
 | 
						|
      });
 | 
						|
      _.reduce(_.sortBy(subgraphs, "order"), function(prev, curr) {
 | 
						|
        cg.setEdge(prev.v, curr.v);
 | 
						|
        return curr;
 | 
						|
      });
 | 
						|
      return min;
 | 
						|
    }
 | 
						|
    return g.node(v).order;
 | 
						|
  }
 | 
						|
  dfs(undefined);
 | 
						|
  */
 | 
						|
}
 |