# directed-graph-to-dag

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])
```

## API

`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.

## License

MIT