# elementary-circuits-directed-graph

> Finds all elementary circuits of a directed graph using Johnson's algorithm (1975)

Latest version **1.3.1** (published 2021-02-05) · MIT license · 0 weekly downloads

## Install

```sh
npm install elementary-circuits-directed-graph
pnpm add elementary-circuits-directed-graph
yarn add elementary-circuits-directed-graph
bun add elementary-circuits-directed-graph
```

## Health

**Score 33/100 (F)** — status: abandoned.

Positive: has types package; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

Negative: abandoned.

## Facts

| | |
|---|---|
| Version | 1.3.1 |
| Published | 2021-02-05 |
| First published | 2019-02-11 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | separate (@types/elementary-circuits-directed-graph) |
| Module format | CommonJS |
| Dependencies | 1 |
| Unpacked size | 2.1 MB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 15 |
| Author | Antoine Roy-Gobeil |
| Maintainers | antrg |

## Links

- npm: https://www.npmjs.com/package/elementary-circuits-directed-graph
- Repository: https://github.com/antoinerg/elementary-circuits-directed-graph
- Homepage: https://github.com/antoinerg/elementary-circuits-directed-graph#readme
- Issues: https://github.com/antoinerg/elementary-circuits-directed-graph/issues
- npm.io page: https://npm.io/package/elementary-circuits-directed-graph

## Dependencies (1)

- [strongly-connected-components](https://npm.io/package/strongly-connected-components.md) ^1.0.1

## Recent versions

- 1.3.1 (latest) — 2021-02-05
- 1.3.0 — 2021-02-05
- 1.2.0 — 2020-02-07
- 1.0.4 — 2019-02-13
- 1.0.3 — 2019-02-13
- 1.0.2 — 2019-02-11
- 1.0.1 — 2019-02-11
- 1.0.0 — 2019-02-11

## README

# elementary-circuits-directed-graph

An implementation of the Johnson's circuit finding algorithm [1].

[1] Donald B. Johnson, Finding all the elementary circuits of a directed
    graph, SIAM Journal on Computing, 1975.

## Example

```javascript
var findCircuits = require("elementary-circuits-directed-graph");

//       V4      V2
// +-<---o---<---o---<--+
// |             |      |
// o V0          ^      o V3
// |           V1|      |
// +------>------o--->--+

var adjacencyList = [
  [1],
  [2, 3],
  [4],
  [2],
  [0]
]

console.log(findCircuits(adjacencyList))

// returns [[0, 1, 2, 4, 0], [0, 1, 3, 2, 4, 0]]
```

Optionally, one can define a callback to manage the result.
```javascript
// reusing the same adjacencyList as before
var counter = 0;
function increment() {
    counter += 1;
}
findCircuits(adjacencyList, increment);
console.log(counter)

// return 2
```
This is especially useful if there are too many elementary circuits
to store in memory. Using a callback, they can be saved to disk instead.

## Install

npm install elementary-circuits-directed-graph

## API

### `require("elementary-circuits-directed-graph")(adjacencyList, callback)`
Finds all the elementary circuits of a directed graph using

* `adjacencyList` is an array of lists representing the directed edges of the graph
* `callback` is an optional function that will be called each time an elementary circuit is found.

**Returns** An array of arrays representing the elementary circuits if no callback was defined.

## Credits
(c) 2018 Antoine Roy-Gobeil. MIT License.

---
_Source: https://npm.io/package/elementary-circuits-directed-graph · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
