You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
josch 11d7e62232 read edges from stdin instead of argv 11 years ago
Makefile add Makefile 12 years ago
README.md add readme 12 years ago
_tags add Makefile 12 years ago
cycles_functional.ml read edges from stdin instead of argv 11 years ago
cycles_iter.ml read edges from stdin instead of argv 11 years ago

README.md

Finding all the elementary circuits of a directed graph

Algorithm by D. B. Johnson

Finding all the elementary circuits of a directed graph.
D. B. Johnson, SIAM Journal on Computing 4, no. 1, 77-84, 1975.
http://dx.doi.org/10.1137/0204007

Functional and iterative version.

Additional code available at http://mancoosi.org/~abate/finding-all-elementary-circuits-directed-graph

Original git repository at http://mancoosi.org/~abate/repos/cycles.git

The original code was faulty. This version is fixed for the functional as well as the iterative version.

Usage

make
./cycles_{iter,functional}.native 4 0,1 0,2 1,0 1,3 2,0 3,0 3,1 3,2

First argument is the number of vertices. Subsequent arguments are ordered pairs of comma separated vertices that make up the directed edges of the graph.

DOT file input

For simplicity, there is no DOT file parser included but the following allows to create a suitable argument string for simple DOT graphs.

Given a DOT file of a simple (no labels, colors, styles, only pairs of vertices...) directed graph, the following line produces commandline arguments in the above format for that graph.

echo `sed -n -e '/^\s*[0-9]\+;$/p' graph.dot | wc -l` `sed -n -e 's/^\s*\([0-9]\) -> \([0-9]\);$/\1,\2/p' graph.dot`

The above line works on DOT files like the following:

digraph G {
  0;
  1;
  2;
  0 -> 1;
  0 -> 2;
  1 -> 0;
  2 -> 0;
  2 -> 1;
  }

It would produce the following output:

3 0,1 0,2 1,0 2,0 2,1