import {Graph} from "graphlib"; export default function addSubgraphConstraints(g: Graph, cg: any, vs: any) { const prev = {} as any; let rootPrev :any; vs.forEach((v: any) => { let child = g.parent(v); let parent; let 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) { const children = v ? g.children(v) : g.children(); if (children.length) { const min = Number.POSITIVE_INFINITY, subgraphs = []; _.each(children, function(child) { const 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); */ }