54 lines
1.2 KiB
JavaScript
54 lines
1.2 KiB
JavaScript
![]() |
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);
|
||
|
*/
|
||
|
}
|