simondh's picture
front
cc651f6
|
raw
history blame
1.1 kB

@rtsao/scc

Find strongly connected components of a directed graph using Tarjan's algorithm.

This algorithm efficiently yields both a topological order and list of any cycles.

Installation

yarn add @rtsao/scc
npm install @rtsao/scc

Usage

const scc = require("@rtsao/scc");

const digraph = new Map([
  ["a", new Set(["c", "d"])],
  ["b", new Set(["a"])],
  ["c", new Set(["b"])],
  ["d", new Set(["e"])],
  ["e", new Set()]
]);

const components = scc(digraph);
// [ Set { 'e' }, Set { 'd' }, Set { 'b', 'c', 'a' } ]

Illustration of example input digraph

β”Œβ”€β”€β”€β”     β”Œβ”€β”€β”€β”
β”‚ d β”‚ ◀── β”‚ a β”‚ ◀┐
β””β”€β”€β”€β”˜     β””β”€β”€β”€β”˜  β”‚
  β”‚         β”‚    β”‚
  β–Ό         β–Ό    β”‚
β”Œβ”€β”€β”€β”     β”Œβ”€β”€β”€β”  β”‚
β”‚ e β”‚     β”‚ c β”‚  β”‚
β””β”€β”€β”€β”˜     β””β”€β”€β”€β”˜  β”‚
            β”‚    β”‚
            β–Ό    β”‚
          β”Œβ”€β”€β”€β”  β”‚
          β”‚ b β”‚ β”€β”˜
          β””β”€β”€β”€β”˜