UNPKG

@dagrejs/graphlib

Version:

A directed and undirected multi-graph library

35 lines (26 loc) 628 B
var _ = require("../lodash"); module.exports = topsort; topsort.CycleException = CycleException; function topsort(g) { var visited = {}, stack = {}, results = []; function visit(node) { if (_.has(stack, node)) { throw new CycleException(); } if (!_.has(visited, node)) { stack[node] = true; visited[node] = true; _.each(g.predecessors(node), visit); delete stack[node]; results.push(node); } } _.each(g.sinks(), visit); if (_.size(visited) !== g.nodeCount()) { throw new CycleException(); } return results; } function CycleException() {}