node package manager
It’s your turn. Help us improve JavaScript. Take the 2017 JavaScript Ecosystem Survey »



Given a directed graph, return a number of edges that may be required to remove all cycles from the graph.

const toDAG = require('directed-graph-to-dag')
const digraph = require('digraph-tag')
const graph = digraph`
  A -> B
  B -> C
  C -> D
  D -> A
toDAG(graph) // Set([C -> D])


Map<Vertex → Set<Edge>> → Edges

A Map from Vertex (whatever type you provide) to Edge will be defined as Edges.

Set<Vertex> → VS

A set containing vertices are known as VS.

toDAG(vertices: VS, in: Edges, out: Edges[, src: fn][, dst: fn]) → Set<Edge>

Given a graph defined by vertices, incoming edges in, outgoing edges out, and optional type-casting functions src and dst, return a set of edges that may be required to turn the graph into a DAG.

Note: the only guarantee is that a cyclical graph will become acyclical by reversing the resulting edges, not that an existing acyclical graph will have no edges recommended for reversal.