blob: 0855cc8cad4c004d184aa9f94cd16bb08c255539 [file] [log] [blame]
library graphlib.layout.order.add_subgraph_constraints;
import "../../graph.dart" show Graph;
addSubgraphConstraints(Graph g, Graph cg, Iterable vs) {
var prev = {},
rootPrev;
vs.forEach((v) {
var child = g.parent(v),
parent,
prevChild;
while (child != null) {
parent = g.parent(child);
if (parent != null) {
prevChild = prev[parent];
prev[parent] = child;
} else {
prevChild = rootPrev;
rootPrev = child;
}
if (prevChild != null && 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);
*/
}