You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

48 lines
1.5 KiB

import { feasibleTreeWithLayer as feasibleTree } from './feasible-tree';
import { networkSimplex } from './network-simplex';
import { longestPath, longestPathWithLayer } from './util';
/*
* Assigns a rank to each node in the input graph that respects the "minlen"
* constraint specified on edges between nodes.
*
* This basic structure is derived from Gansner, et al., "A Technique for
* Drawing Directed Graphs."
*
* Pre-conditions:
*
* 1. Graph must be a connected DAG
* 2. Graph nodes must be objects
* 3. Graph edges must have "weight" and "minlen" attributes
*
* Post-conditions:
*
* 1. Graph nodes will have a "rank" attribute based on the results of the
* algorithm. Ranks can start at any index (including negative), we'll
* fix them up later.
*/
export const rank = (g, ranker) => {
switch (ranker) {
case 'network-simplex':
networkSimplexRanker(g);
break;
case 'tight-tree':
tightTreeRanker(g);
break;
case 'longest-path':
longestPathRanker(g);
break;
// default: networkSimplexRanker(g);
default:
tightTreeRanker(g);
}
};
// A fast and simple ranker, but results are far from optimal.
const longestPathRanker = longestPath;
const tightTreeRanker = (g) => {
longestPathWithLayer(g);
feasibleTree(g);
};
const networkSimplexRanker = (g) => {
networkSimplex(g);
};
//# sourceMappingURL=index.js.map