docs/api.lisp @ 884333cfb6fb v1.3.2

Detect *all* cycles during topological sort

Previously the cycle detection was limited to detecting when we hit
a currently-being-visited node during a traversal.  So something like this would
be correctly found:

    A --> B --> C
          ^     |
          |     |
          +-----+

We start at the root (A), go to B, then to C, then to B, and detect that we're
still working on B and signal the error.

But this doesn't find all cycles, because we *start* at the root nodes, and if
a cycle doesn't have any outcropping branches we'll never reach it at all.  For
example:

    A --> B
    ^     |
    |     |
    +-----+

This graph has no roots, so we incorrectly ignore the cycle.

This patch fixes the problem by keeping a count of visited nodes and and making
sure it matches the digraph's size at the end.

Fixes https://github.com/sjl/cl-digraph/issues/4
author Steve Losh <steve@stevelosh.com>
date Mon, 14 Dec 2020 20:13:51 -0500
parents 412a127b7419
children 7e80eda84170
(ql:quickload "cl-d-api")

(defparameter *header*
  "The following is a list of all user-facing parts of cl-digraph.

If there are backwards-incompatible changes to anything listed here, they will
be noted in the changelog and the author will feel bad.

Anything not listed here is subject to change at any time with no warning, so
don't touch it.

")

(d-api:generate-documentation
  :cl-digraph
  #p"docs/03-reference.markdown"
  (list "DIGRAPH")
  *header*
  :title "API Reference")

(d-api:generate-documentation
  :cl-digraph.dot
  #p"docs/04-reference-dot.markdown"
  (list "DIGRAPH.DOT")
  "cl-digraph includes support for drawing digraphs with Graphviz using `cl-dot`
  in the `cl-digraphs.dot` system.

  "
  :title "cl-dot Support")